SSL证书绑定失败 - 访问被拒绝

时间:2016-05-27 11:47:14

标签: c# ssl ssl-certificate port

我想将证书绑定到端口 0.0.0.0:443 作为我已创建的此证书的参数:

ICertificateBindingConfiguration config = new CertificateBindingConfiguration();

var ipPort = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 443);

var certificateThumbprint = serverCert.X509Certificate.Thumbprint.ToLower();

var appId = Guid.Parse("2f6580e5-a11a-4350-8cc0-47e5e0ac33e6");

但是当我执行这段代码时:

config.Bind(new CertificateBinding(certificateThumbprint, StoreName.My, ipPort, appId));

我收到错误:

System.ComponentModel.Win32Exception(0x80004005): Access is denied ...

我在执行它的机器中不是本地管理员。我如何通过以管理员身份执行它来解决此问题?

1 个答案:

答案 0 :(得分:1)

这是因为您的计算机没有管理员权限。你需要确定你有。要检查您是否拥有管理员权限,可以使用以下代码示例:

static bool IsElevated => new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);

您可以创建一个示例C#控制台应用程序并使用上面的代码行。 您需要使用以下代码行:using System.Security.Principal; 如果它工作,那么最好在另一个.exe文件中运行此功能,并创建一个类似下面方法的方法来执行它作为管理员:

public static int RunProcessAsAdmin(string exeName, string parameters)
{
    try {
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.UseShellExecute = true;
        startInfo.WorkingDirectory = CurrentDirectory;
        startInfo.FileName = Path.Combine(CurrentDirectory, exeName);
        startInfo.Verb = "runas";
        //MLHIDE
        startInfo.Arguments = parameters;
        startInfo.ErrorDialog = true;

        Process process = System.Diagnostics.Process.Start(startInfo);
        process.WaitForExit();
        return process.ExitCode;
    } catch (Win32Exception ex) {
        WriteLog(ex);
        switch (ex.NativeErrorCode) {
            case 1223:
                return ex.NativeErrorCode;
            default:
                return ErrorReturnInteger;
        }

    } catch (Exception ex) {
        WriteLog(ex);
        return ErrorReturnInteger;
    }
}