56

您能否告诉我是否可以使用 APPCMD 应用程序将 SSL 证书分配给 IIS7 中的网站?

我熟悉设置 HTTPS 绑定的命令

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

以及如何获取当前映射

%windir%\system32\inetsrv\Appcmd

但似乎找不到任何将站点映射到证书的方法(例如证书哈希)

4

8 回答 8

54

答案是使用 NETSH。例如

netsh http add sslcert ipport=0.0.0.0:443 certhash='baf9926b466e8565217b5e6287c97973dcd54874' appid='{ab3c58f7-8316-42e3-bc6e-771d4ce4b201}'
于 2009-05-07T11:44:10.180 回答
17

这对我帮助很大:Sukesh Ashok Kumar 编写的简单指南,用于从命令行为 IIS 设置 SSL。certutil包括使用/导入/生成证书makecert

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

编辑:如果原始 URL 已关闭,它仍然可以通过 Wayback Machine获得。

于 2010-10-17T16:56:13.710 回答
9

使用 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-Itemcmdlet 接受 IP 地址(所有 IP 为 0.0.0.0)和端口。

有关更多详细信息,请参阅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 预发行版中对此进行了测试。

于 2012-08-07T19:55:32.703 回答
4

@David 和 @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

于 2011-12-01T00:29:52.050 回答
1

使用这篇文章的答案,我创建了一个脚本来为我解决问题。它从 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:']
于 2018-01-12T09:33:05.293 回答
1

如果您尝试在不使用 MMC 管理单元 GUI 的情况下执行 IIS 管理,则应使用 powershell WebAdministration 模块。

此博客上的其他答案不适用于更高版本的 Windows Server (2012)

于 2019-12-02T22:50:32.173 回答
1

使用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"

如果您需要命名绑定,请将netshcall 替换为:

netsh http add sslcert hostnameport="$certificateName:443" certhash=$thumbprint certstorename=MY appid="$guid"
于 2020-03-25T19:47:57.490 回答
0

使用 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
于 2021-12-15T16:12:05.537 回答