如何从命令提示符将 SSL 证书分配给 IIS7 站点

Posted

技术标签:

【中文标题】如何从命令提示符将 SSL 证书分配给 IIS7 站点【英文标题】:How to assign a SSL Certificate to IIS7 Site from Command Prompt 【发布时间】:2010-10-10 03:32:33 【问题描述】:

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

我熟悉设置 HTTPS 绑定的命令

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

以及如何获取当前映射

%windir%\system32\inetsrv\Appcmd

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

【问题讨论】:

【参考方案1】:

答案是使用 NETSH。 例如

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

【讨论】:

我只是为 appID 使用随机 GUID 对我不起作用:SSL 证书添加失败,错误:183 当文件已存在时无法创建文件。 输入 netsh http show sslcert 将给出机器上安装的证书的 appid 和 certash。 您好,来自未来的强力炮手。记得在appid='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'中加单引号 有人可以详细说明如何获取特定网站的应用 ID 吗?我尝试了 Get-StartApps,但其中似乎没有列出任何网站。【参考方案2】:

这对我帮助很大: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 已关闭,它仍然可用 through the Wayback Machine。

【讨论】:

@TLS - 废话。添加了回路机链接。【参考方案3】:

使用 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 cmdlet 接受 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 预发行版中对此进行了测试。

【讨论】:

我喜欢您可以使用 Get-Item cert:\LocalMachine\My* 来利用 AD 配置的 SSL 证书的方式。 这个命令成功了,但是在iis窗口中没有为我选择ssl证书,这个实际上是做什么的?【参考方案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

【讨论】:

【参考方案5】:

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

【讨论】:

你为什么使用netshappcmd?我试图理解这个过程,但在我看来,他们正在做同样的事情(为所有 ips 创建绑定)。我是不是丢了什么东西?【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

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

【讨论】:

以上是关于如何从命令提示符将 SSL 证书分配给 IIS7 站点的主要内容,如果未能解决你的问题,请参考以下文章

IIS6:从命令行创建/安装 SSL 自签名证书

SSL证书不会保存

将 ssl 证书从 let's encrypt 分配给 BIG-IP F5 负载均衡器 (LTM)

如何在IIS7安装多域名SSL证书

2008申请SSL证书,IIS7怎么申请SSL安全证书

服务器安装SSL证书教程