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 证书的主要内容,如果未能解决你的问题,请参考以下文章
.NET - Excel ListObject 在数据绑定上自动调整大小
在 Rust 项目的 C 绑定上运行 jextract 时出现致命错误“'stdlib.h' 文件未找到”