Как назначить сертификат SSL для сайта IIS7 из командной строки

Можете ли вы посоветовать мне, можно ли или нет назначать SSL-сертификат веб-сайту в IIS7 с помощью приложения APPCMD?

Я знаком с командой для установки привязки HTTPS

appcmd set site /site.name:"A Site" /+bindings.[protocol='https',bindingInformation='*:443:www.mysite.com']

и как получить текущие сопоставления

%windir%\system32\inetsrv\Appcmd

но не могу найти какой-либо способ сопоставить сайт с сертификатом (скажем, например, хэш сертификатов)

9 ответов

Решение

Ответ заключается в использовании NETSH. Например

netsh http add sslcert ipport=0.0.0.0:443 certhash='baf9926b466e8565217b5e6287c97973dcd54874' appid='{ab3c58f7-8316-42e3-bc6e-771d4ce4b201}'

Это мне очень помогло: простое руководство Сукеша Ашока Кумара по настройке SSL для IIS из командной строки. Включает в себя импорт / генерацию сертификата с certutil / makecert,

http://www.awesomeideas.net/post/How-to-configure-SSL-on-IIS7-under-Windows-2008-Server-Core.aspx

РЕДАКТИРОВАТЬ: если исходный URL не работает, он все еще доступен через Wayback Machine.

С помощью PowerShell и модуля WebAdministration вы можете выполнить следующие действия, чтобы назначить SSL-сертификат сайту IIS:

# ensure you have the IIS module imported
Import-Module WebAdministration

cd IIS:\SslBindings
Get-Item cert:\LocalMachine\My\7ABF581E134280162AFFFC81E62011787B3B19B5 | New-Item 0.0.0.0!443

Стоит отметить... значение "7ABF581E134280162AFFFC81E62011787B3B19B5" является отпечатком сертификата, который вы хотите импортировать. Поэтому его нужно сначала импортировать в хранилище сертификатов. New-Item Командлет принимает IP-адрес (0.0.0.0 для всех IP-адресов) и порт.

См. http://learn.iis.net/page.aspx/491/powershell-snap-in-configuring-ssl-with-the-iis-powershell-snap-in/ для получения более подробной информации.

Я протестировал это в Windows Server 2008 R2, а также в предварительной версии Windows Server 2012.

@ Дэвид и @orip имеют право.

Однако я хотел упомянуть, что параметр ipport, указанный в примере (0.0.0.0:443), является тем, что MSDN называет "неопределенным адресом (IPv4: 0.0.0.0 или IPv6: [::])".

Я пошел посмотреть, и решил, что запишу здесь, чтобы сэкономить время. Эта статья посвящена SQL Server, но информация по-прежнему актуальна:

http://msdn.microsoft.com/en-us/library/ms186362.aspx

Если вы пытаетесь выполнить администрирование IIS без использования графического интерфейса оснастки MMC, вам следует использовать модуль PowerShell WebAdministration.

Другие ответы в этом блоге не работают в более поздних версиях Windows Server (2012).

Используя ответы из этого поста, я создал один скрипт, который помог мне. Он начинается с файла pfx, но вы можете пропустить этот шаг.

Вот:

cd C:\Windows\System32\inetsrv

certutil -f -p "pa$$word" -importpfx "C:\temp\mycert.pfx"

REM The thumbprint is gained by installing the certificate, going to cert manager > personal, clicking on it, then getting the Thumbprint.
REM Be careful copying the thumbprint. It can add hidden characters, esp at the front.
REM appid can be any valid guid
netsh http add sslcert ipport=0.0.0.0:443 certhash=5de934dc39cme0234098234098dd111111111115 appid={75B2A5EC-5FD8-4B89-A29F-E5D038D5E289}

REM bind to all ip's with no domain. There are plenty of examples with domain binding on the web
appcmd set site "Default Web Site" /+bindings.[protocol='https',bindingInformation='*:443:']

С помощью PowerShell + netsh:

$certificateName = 'example.com'
$thumbprint = Get-ChildItem -path cert:\LocalMachine\My | where { $_.Subject.StartsWith("CN=$certificateName") } | Select-Object -Expand Thumbprint
$guid = [guid]::NewGuid().ToString("B")
netsh http add sslcert ipport="0.0.0.0:443" certhash=$thumbprint certstorename=MY appid="$guid"

Если вам нужна именованная привязка, замените netsh позвоните с этим:

netsh http add sslcert hostnameport="$certificateName:443" certhash=$thumbprint certstorename=MY appid="$guid"

С помощью IISAdministration 1.1.0.0 (https://www.powershellgallery.com/packages/IISAdministration/1.1.0.0) вы можете использовать следующий код, чтобы добавить новую привязку HTTPS к определенному сайту:

      $thumbPrint = (gci Cert:\localmachine\My | Where-Object { $_.Subject -Like "certSubject*" }).Thumbprint
New-IISSiteBinding -Name "Site Name" -BindingInformation "*:443:" -CertificateThumbPrint $thumbPrint -CertStoreLocation My -Protocol https

Просмотр существующих привязок с помощью

      Get-IISSiteBinding -Name "Site Name"

Удалите существующую привязку с помощью

      Remove-IISSiteBinding -Name "Site Name" -BindingInformation "*:443:" -Protocol https -Confirm:$False

С некоторыми возможностями повторного входа:

      $securePfxKey=ConvertTo-SecureString -String $mypwd -AsPlainText -Force
Import-PfxCertificate -FilePath MySpector.pfx -CertStoreLocation Cert:\LocalMachine\My -Password $securePfxKey
$mypfx=Get-PfxData -FilePath MySpector.pfx -Password $securePfxKey
$newThumbprint=$mypfx.EndEntityCertificates.Thumbprint
$applicationID="{4dc3e181-e14b-4a21-b022-59fc669b0914}" # hardcode it once
netsh http delete sslcert ipport=0.0.0.0:443
netsh http add sslcert ipport=0.0.0.0:443 certhash=$newThumbprint appid=$applicationID
Другие вопросы по тегам