Powershell - 在 https 绑定上设置 SSL 证书

Posted

技术标签:

【中文标题】Powershell - 在 https 绑定上设置 SSL 证书【英文标题】:Powershell - Set SSL Certificate on https Binding 【发布时间】:2015-11-30 03:25:03 【问题描述】:

我正在尝试使用 PowerShell 在 IIS 站点上为自签名/本地证书设置 SSL 证书。

我创建证书:

$newCert = 
       New-SelfSignedCertificate 
       -DnsName www.mywebsite.ru 
       -CertStoreLocation cert:\LocalMachine\My

然后尝试设置 SSL 绑定:

get-item 
      cert:\LocalMachine\MY\$newCert.Thumbprint | 
      new-item -path IIS:\SslBindings\0.0.0.0!443

如本帖所示:http://www.iis.net/learn/manage/powershell/powershell-snap-in-configuring-ssl-with-the-iis-powershell-snap-in

这里也显示: Powershell IIS7 Snap in Assign SSL certificate to https binding

我也试过了:

get-item 
      cert:\LocalMachine\MY\$newCert.Thumbprint | 
      new-item -path IIS:\SslBindings\*!443

无济于事,我没有在“编辑站点绑定”对话框中看到 SSL 证书设置。

有什么想法吗?

【问题讨论】:

使用IIS:\SslBindings\0.0.0.0!443 而不是IIS:\SslBindings\*!443。当您将站点绑定到此端口时,它将使用已注册的证书。 【参考方案1】:

您必须将证书分配给特定网站。

您可以使用Get-WebBinding cmdlet 检索您网站的绑定信息,并使用AddSslCertificate 函数设置 SSL 证书:

$siteName = 'mywebsite'
$dnsName = 'www.mywebsite.ru'

# create the ssl certificate
$newCert = New-SelfSignedCertificate -DnsName $dnsName -CertStoreLocation cert:\LocalMachine\My

# get the web binding of the site
$binding = Get-WebBinding -Name $siteName -Protocol "https"

# set the ssl certificate
$binding.AddSslCertificate($newCert.GetCertHashString(), "my")

【讨论】:

最后一行:指定的登录会话不存在。它可能已经被终止。 (HRESULT 异常:0x80070520) @ChuckD 这通常意味着您的私钥丢失或无法被运行 IIS 的用户访问。编辑:或者是的,它并没有像 Richard Squires 所说的那样被导入。 :D【参考方案2】:

我在使用答案时遇到了与“Chuck D”相同的错误,我发现需要额外的步骤:

SSL 证书需要在证书存储中才能绑定到添加到 IIS 网站绑定。这可以在 powershell 中使用以下命令完成:

Import-PfxCertificate -FilePath "C:\path to certificate file\certificate.pfx" -CertStoreLocation "Cert:\LocalMachine\My"

【讨论】:

【参考方案3】:

AddSslCertificate 方法并非随处可用。我使用 Netsh 找到了不同的解决方案。

$iisCert = Get-ChildItem -Path "Cert:\LocalMachine\MY" `
| Where-Object  $_.FriendlyName -eq "IIS Express Development Certificate"  `
| Select-Object -First 1

$applicationId = [Guid]::NewGuid().ToString("B") 

netsh http add sslcert ipport=0.0.0.0:443 certhash=$($iisCert.Thumbprint) appid=$applicationId

也可以设置其他参数(例如certstorename=MY)。更多信息可以在HTTP Server API页面上找到。

【讨论】:

以上是关于Powershell - 在 https 绑定上设置 SSL 证书的主要内容,如果未能解决你的问题,请参考以下文章

Android数据绑定上的字符串比较

端口绑定上的游戏制作者网络问题

.NET - Excel ListObject 在数据绑定上自动调整大小

在 Rust 项目的 C 绑定上运行 jextract 时出现致命错误“'stdlib.h' 文件未找到”

net.tcp 绑定上的线程不足 - TCP 错误代码 10061

mariadb 作为 docker 容器 - 主机挂载绑定上的启动损坏