Как настроить SSL-сертификат службы управления IIS 10.0 с помощью сценария Powershell, чтобы разрешить веб-развертывание? - PullRequest
0 голосов
/ 27 ноября 2018

Когда я запускаю обновления Windows и создаю sysprep мой экземпляр Amazon EC2 (Windows Server 2016), я должен создать новый самозаверяющий сертификат.Затем я могу выбрать сертификат SSL (я назвал его WebDeploy) на экране службы управления.Я выяснил, как создать сертификат SSL из Windows Powershell, но мне нужно выбрать сертификат SSL из выпадающего списка на скриншоте.Как я могу установить этот сертификат SSL из командной строки?

IIS Management Service screenshot

Вот что я пробовал, но это не сработало - я смог избежать ошибок, ноНи один из них не позволил WebDeploy работать без моего участия в окне диспетчера IIS и ручного выбора выпадающего списка.

Stop-Service wmsvc
$strGuid = New-Guid
Import-Module WebAdministration
Remove-Item -Path IIS:\SslBindings\0.0.0.0!8172
Get-Item -Path  "cert:\localmachine\my\$strHashThumbprint" | New-Item -Path 
IIS:\SslBindings\0.0.0.0!8172 
Start-Service wmsvc

А также, это не сработало:

Stop-Service wmsvc
netsh http delete sslcert ipport=0.0.0.0:8172
netsh http add sslcert ipport=0.0.0.0:8172 certhash=$strHashThumbprint appid=`{$strGuid`} certstorename="MY" sslctlstorename="MY"
Start-Service wmsvc

Инаконец, это не сработало:

Stop-Service wmsvc
Add-NetIPHttpsCertBinding -IpPort "0.0.0.0:8172" -CertificateHash $strHash -CertificateStoreName "My" -ApplicationId "{$strGuid}" -NullEncryption $false 
Start-Service wmsvc

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Я наконец нашел ответ в https://forums.iis.net/t/1238001.aspx

Я не уверен, нужна ли доверенная часть корневого хранилища или нет - кажется, все работает без этого, но я очень уверен, что ключи реестранужно обновлять.Это был ключ к тому, чтобы заставить это работать.

Полный сценарий:

# Delete any existing certificates
Set-Location -Path "cert:\LocalMachine\My"
Get-ChildItem -Path "cert:\LocalMachine\My" | Remove-Item

#Create the new certificate
$strNewCertficate = New-SelfSignedCertificate -FriendlyName "WebDeploy" -DnsName "yoursite.com" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter $([datetime]::now.AddYears(5))
$strHashThumbprint = $strNewCertficate.Thumbprint

#add it to the trusted root store
$trustedRootStore = New-Object System.Security.Cryptography.X509Certificates.X509Store("root","LocalMachine")
$trustedRootStore.open("ReadWrite");
$trustedRootStore.add($strNewCertficate);

#Use the new certificate
Stop-Service wmsvc
$strGuid = New-Guid
netsh http delete sslcert ipport=0.0.0.0:8172
netsh http add sslcert ipport=0.0.0.0:8172 certhash=$strHashThumbprint appid=`{$strGuid`} certstorename="MY"

#convert thumbprint to bytes and update registry
$bytes = for($i = 0; $i -lt $strHashThumbprint.Length; $i += 2) { [convert]::ToByte($strHashThumbprint.SubString($i, 2), 16) }
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\WebManagement\Server' -Name IPAddress -Value "*";
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\WebManagement\Server' -Name SslCertificateHash -Value $bytes
Start-Service wmsvc
0 голосов
/ 27 ноября 2018

Версия IIS, несмотря на то, что этот вопрос очень похож на ...

Как назначить другой сертификат SSL для службы управления IIS7 + на Server-Core?

# get the thumbprint for the certificate we want to use:
$thumb = (Get-ChildItem cert:\LocalMachine\MY | where-object { $_.FriendlyName -eq   "www.stackoverflow.com" } | Select-Object -First 1).Thumbprint
# get a new guid:
$guid = [guid]::NewGuid()

# remove the self-signed certificate:
& netsh http delete sslcert ipport=0.0.0.0:8172
# add the 'proper' certificate:
& netsh http add sslcert ipport=0.0.0.0:8172 certhash=$thumb appid=`{$guid`}
...