Программно назначить существующий сертификат ssl веб-сайту в iis6 через powershell или vbscript - PullRequest
4 голосов
/ 03 января 2011

У меня есть следующий скрипт powershell, который создает новый веб-сайт в IIS6:

https://github.com/dagda1/iis6/blob/master/create-site.ps1

Кто-нибудь знает, как я могу назначить существующий сертификат SSL длявеб-сайт?

Я знаю, что могу установить номер порта, используя adsutil.vbs, например:

cscript adsutil.vbs set w3svc/xxx/securebindings ":443:somewhere.com"

Но я рисуюбольшой пробел, когда дело доходит до назначения существующего сертификата ssl.

Ответы [ 3 ]

5 голосов
/ 04 января 2011

Я думаю, что это то, что вы хотите:

$w3svc = "W3SVC/566412209"     # <-- W3SVC/[iis number]
$pfxPath = "c:\ssl\myssl.pfx"
$pfxPassword = "password123"   # Whatever the certificate file's password is

$certMgr = New-Object -ComObject IIS.CertObj
$certMgr.ServerName = [System.Environment]::MachineName
$certMgr.InstanceName = $w3svc
$certMgr.Import($pfxPath, $pfxPassword, $true, $true)

Вы также можете создать сборку взаимодействия .NET (добавив ссылку на COM к C:\WINDOWS\system32\inetsrv\certobj.dll или используя tlbimp.exe), чтобы вы могли использовать сПроекты PowerShell и .NET:

[void][reflection.assembly]::loadfrom("Interop.CERTOBJLib.dll")
$certMgr = new-object -typeName CERTOBJLib.IISCertObjClass
$certMgr.ServerName = [System.Environment]::MachineName
$certMgr.InstanceName = $w3svc
$certMgr.Import($pfxPath, $pfxPassword, $true, $true)

Вы по-прежнему должны устанавливать привязки портов SSL отдельно, как вы уже делаете.

Документы MS на IIS.CertObj находятся здесь:

Управление сертификатами сервера с помощью IISCertObj (IIS 6.0)

2 голосов
/ 22 июня 2011

Поскольку на это уже есть ответ, я просто предоставлю свой собственный вкус для этой функции.Это эквивалентно использованию графического интерфейса пользователя для открытия веб-сайта и «Назначения существующего сертификата».

Function ImportSSLCertificateToWebsite{
    param([string]$pfxPath, [string]$pfxPassword, [string]$siteName, [string]$SSLIPPort);
    <# This script is deigned to run locally on the destination box; however it can be run remotely via Invoke-Command using a PSSession #>;
    <# $pfxPath can be a local or remote location "c:\somesite.pfx" or "\\someserver\share\somesite.pfx" #>;
    <# SSLIPPort must look like: "10.5.100.2:443" or ":443", will be split out below #>;
    $SSLIPPortTemp=$SSLIPPort.Split(":");
    $SSLIP=[string]$SSLIPPortTemp[0];
    $SSLPort=[string]$SSLIPPortTemp[1];
    $iisWebSite = Get-WmiObject -Namespace 'root\MicrosoftIISv2' -Class IISWebServerSetting -Filter "ServerComment = '$siteName'";
    $secureBindings=[System.Management.ManagementBaseObject[]]$iisWebSite.SecureBindings;
    $secureBindings[0].IP="$SSLIP";
    $secureBindings[0].PORT="$SSLPort"+":"; <# must look like "443:" #>;
    $iisWebSite.SecureBindings=[System.Management.ManagementBaseObject[]]$secureBindings;
    $iisWebSite.SetInfo;
    $iisWebsite.Put();
    <# to output the SecureBindings object for confirmation changes were made #>; foreach($a in [System.Management.ManagementBaseObject[]]$iisWebSite.SecureBindings){$a};
    $certMgr = New-Object -ComObject IIS.CertObj -ErrorAction SilentlyContinue;
    $certMgr.InstanceName = [string]$iisWebSite.Name;
    $certMgr.Import($pfxPath,$pfxPassword,$true,$true);
}
ImportSSLCertificateToWebsite "\\secure101\Certs\PFX\somesite.yourdomain.com.pfx" "ThePasswordForThePFX" "somesite.yourdomain.com" ":443"
0 голосов
/ 02 февраля 2011

Установите некоторые переменные:

${HostName} = "mydomain.com"
${IPAddressString} = "127.0.0.1"
${Port} = 43
${CertificateThumbprint} = Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Subject -like "CN=*${HostName}*" } | Select-Object -expand Thumbprint

Затем запустите netsh или httpcfg

netsh http add sslcert "ipport=${IPAddressString}:${Port}" "certhash=${CertificateThumbprint}" "appid={4dc3e181-e14b-4a21-b022-59fc669b0914}"

или

httpcfg set ssl -i ${IPAddressString}:${Port} -h ${CertificateThumbprint} -g "{4dc3e181-e14b-4a21-b022-59fc669b0914}"
...