我正在尝试完成我的 Web 服务器的自动构建脚本,该服务器运行 Windows 2012 并有两个 SSL 网站,每个网站都有自己的数字证书。
我正在使用 SNI,当我手动设置时它可以正常工作,但是当我使用 APPCMD 设置相同的配置时,我无法弄清楚如何为绑定中的站点选择证书。
使用手动方法时,可以使用下拉列表来选择证书。我正在寻找与从该列表中选择证书等效的命令行。
有人知道你是怎么做到的吗?
答案1
我不知道 appcmd,我认为那是一个不建议再使用的遗留工具。
在 PowerShell 中,您可以使用 SSlFlags 参数指示 SNI,0 表示无 SNI,1 表示设置 SNI。
New-WebBinding -Name site1.local -Port 443 -Protocol https -SslFlags 0
New-WebBinding -Name site2.local -Port 443 -Hostheader site2.local -Protocol https -SslFlags 1
要分配现有证书,请首先获取证书的指纹和 GUID,然后使用 netsh
$thumb = (Get-ChildItem cert:\LocalMachine\MY | where-object { $_.FriendlyName -match "site2" } | Select-Object -First 1).Thumbprint
$guid = [guid]::NewGuid()
& netsh http add sslcert hostnameport=site2.local:443 certhash=$thumb appid=`{$guid`} certstorename=MY
对于不使用 SNI 的站点:
$thumb = (Get-ChildItem cert:\LocalMachine\MY | where-object { $_.FriendlyName -match "site1" } | Select-Object -First 1).Thumbprint
$guid = [guid]::NewGuid()
& netsh http add sslcert ipport=0.0.0.0:443 certhash=$thumb appid=`{$guid`} certstorename=MY
答案2
这是我对自己的问题找到的答案...
我需要使用以下语法的 netsh:-
netsh http add sslcert hostnameport=www.shifts.org.uk:443 certstorename=MY certhash=<put your hash here> appid={<put your app ID here>}
我之前遗漏的关键部分是上面称为“hostnameport”的参数。我希望这能对将来的某些人有所帮助。
问候,
广告