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

SSL Certificate Binding fails - Access is denied

我想绑定证书到端口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 ...

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

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

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;
    }
}