Vb.net 以编程方式导入和绑定SSL证书

Vb.net 以编程方式导入和绑定SSL证书,vb.net,iis-7,ssl-certificate,iis-7.5,netsh,Vb.net,Iis 7,Ssl Certificate,Iis 7.5,Netsh,我正在致力于将SSL证书支持添加到VB.NETAPI中,但在通过代码实现这一点时遇到了问题。如果我手动将证书导入IIS,然后运行netsh命令,我就可以让它工作。我有一个用mkcert创建的证书,它正在导入IIS 将证书导入IIS cmd:netsh http delete sslcert ipport=0.0.0.0:443 使用https/443 baseurl启动我的API 这正是我们想要的 当我试图通过代码执行此操作时,发现netsh error指定的登录会话不存在。下面是我用来导入和绑

我正在致力于将SSL证书支持添加到VB.NETAPI中,但在通过代码实现这一点时遇到了问题。如果我手动将证书导入IIS,然后运行netsh命令,我就可以让它工作。我有一个用
mkcert
创建的证书,它正在导入IIS

  • 将证书导入IIS
  • cmd:
    netsh http delete sslcert ipport=0.0.0.0:443
  • 使用https/443 baseurl启动我的API
  • 这正是我们想要的
  • 当我试图通过代码执行此操作时,发现netsh error
    指定的登录会话不存在
    。下面是我用来导入和绑定证书的代码

    ' Import the certificate into IIS LocalComputer, this is needed for the ip address bindings.
    Dim IIS = New X509Store(StoreName.My, StoreLocation.LocalMachine)
    IIS.Open(OpenFlags.ReadWrite)
    Try
        For Each certificate As X509Certificate2 In x509
            IIS.Add(certificate)
        Next
    Finally
        IIS.Close()
    End Try
    
    ' Bind the SSL Cert to the network address and port.
    Dim p As Process = New Process()
    Dim pi As ProcessStartInfo = New ProcessStartInfo()
    Dim cmd As String = " /K " + "netsh http add sslcert ipport=0.0.0.0:" + port.ToString() + " certhash=" + CertificateThumbprint + " appid={myAppId}"
    Console.WriteLine(cmd)
    pi.Arguments = cmd
    pi.FileName = "cmd.exe"
    p.StartInfo = pi
    p.Start()
    

    因此,我可以通过更改以下内容来实现这一点:

    Try
        Dim certificate = New X509Certificate2(CertificatePath, CertificatePassword, X509KeyStorageFlags.Exportable Or X509KeyStorageFlags.MachineKeySet)
        IIS.Open(OpenFlags.ReadWrite)
        IIS.Add(certificate)
    Finally
        IIS.Close()
    End Try
    

    因此,我可以通过更改以下内容来实现这一点:

    Try
        Dim certificate = New X509Certificate2(CertificatePath, CertificatePassword, X509KeyStorageFlags.Exportable Or X509KeyStorageFlags.MachineKeySet)
        IIS.Open(OpenFlags.ReadWrite)
        IIS.Add(certificate)
    Finally
        IIS.Close()
    End Try
    

    PInvoke HTTP API,你得到你想要的,PInvoke HTTP API,你得到你想要的,