使用PowerShell脚本在IIS 8中注册启用了SNI的https绑定

Bas*_*e33 10 iis powershell ssl powershell-2.0 powershell-3.0

我目前正在设置一个新的自动部署,并想知道如何以编程方式在IIS 8上注册启用SNI的https绑定.该网站已存在,并且已安装SSL证书.

powershell脚本传入以下参数:

  • 网站名称
  • SSL证书指纹
  • 要绑定的域

假设已安装SSL证书.

谁能帮我?

Car*_*rlR 14

如果您说已经安装了证书并且应用程序池标识具有私钥的权限,那么您应该能够注册一个新的绑定,如下所示:

New-WebBinding -Name $WebsiteName -Protocol "https" -Port 443 -IPAddress $IPAddress -HostHeader $HostHeader -SslFlags $sslFlags
Run Code Online (Sandbox Code Playgroud)

您当然需要在运行此代码之前设置变量,但这些应该是不言自明的.

设置$ sslFlags变量的值时,应根据下表设置:

0  No SNI
1  SNI Enabled
2  Non SNI binding which uses Central Certificate Store.
3  SNI binding which uses Central Certificate store
Run Code Online (Sandbox Code Playgroud)

在您的情况下,由于您没有使用中央证书存储,因此应将其设置为1.

一旦您获得了SSL绑定,您就需要将绑定与正确的证书相关联.我通过经验发现,最简单的方法是使用netsh.exe命令.可以直接使用Powershell,但经过数小时的调查和解决不同的问题后,我发现netsh更可靠.

这里的语法取决于如何设置绑定,但是如果您使用SNI则需要以下语法:(不要担心appid,值不重要)

netsh http add sslcert hostnameport=$($HostHeader):$($Port) certhash=$Thumbprint appid='{4dc3e181-e14b-4a21-b022-59fc669b0914}' certstorename=MY
Run Code Online (Sandbox Code Playgroud)

此代码还需要设置变量.主机头应该是您的网站绑定的DNS名称,端口很可能是443,变量$ Thumbprint需要包含指纹或您将要使用的证书的哈希.您可以使用证书提供程序找到此代码,如以下代码所示:

$Thumbprint = (Get-ChildItem -Path cert:\LocalMachine\My | Where-Object {$_.GetNameInfo("SimpleName",$false) -eq "my cert common name"}).Thumbprint
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助,如果您需要更多帮助,请更新问题.我在这方面做了很多工作.


小智 6

如果您不想使用Netsh,也可以仅使用Powershell 添加SNI绑定(设置了“需要服务器名称指示”标志!)。

这是我可以为IIS8找到的最简单的方法:

# Parameters:
$WebsiteName = "Your Site Name" # this is the Sites name as displayed in IIS Manager
$port = 443 # SSL Port, when using SNI most likely the default port 443
$hostHeader = "www.example.com" # the domain / host-header this binding should listen for
$thumbprint = "AAABBBCCCDDDEEEFFF000111222333444555666" # the certificate thumbprint
# Commands:
New-Item -Path "IIS:\SslBindings\!$port!$hostHeader" -Thumbprint $thumbprint -SSLFlags 1
New-WebBinding -Name $WebsiteName -Protocol "https" -Port $port -HostHeader $hostHeader -SslFlags 1
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助!:-)