我有3个网站: aaa.my-domain.com , bbb.my-domain.com和ccc.my-domain.com都使用IIS 7.5上的单个通配符证书*.my-domain.com Windows Server 2008R2 64位。 该证书在一个月内到期,我的服务器上准备了新的通配证书*.my-domain.com 。
我希望所有这些域都使用新的通配符证书,而不会显着停机。
我尝试通过用户界面通常取代aaa.my-domain.com证书开始: 
但是当我按下确定,我得到以下错误:
—————————编辑网站绑定——————– ——-
至less有一个其他站点使用相同的HTTPS绑定,并使用不同的证书configuration绑定。 您确定要重新使用此HTTPS绑定并重新分配其他站点以使用新证书?
—————————是否——————— ——
当我单击是时 ,我收到以下消息:
—————————编辑网站绑定——————– ——-
与此绑定关联的证书也被分配给另一个站点的绑定。 编辑此绑定将导致其他站点的HTTPS绑定不可用。 你还想继续吗?
—————————是否——————— ——
此消息告诉我, https://bbb.my-domain.com和https://ccc.my-domain.com将变得不可用。 而且至less在我完成这两个领域的证书replace之前,我将会有宕机,对吗?
我在想,这样做肯定有一个更明智的方法。 可能通过命令行立即replace所有网站的新通配符证书。 我在网上找不到任何资源如何做到这一点。 有任何想法吗?
与通配符和绑定相关的站点:
与从命令行绑定证书相关的站点:
答案的上下文是,IIS 7实际上并不关心证书绑定。 IIS 7仅将网站绑定到一个或多个套接字。 每个套接字都是IP +端口的组合。 来源: IIS7从命令行添加证书到站点
所以,我们要做的是在操作系统层上重新绑定证书。 OS层控制SSL部分,因此您使用netsh将证书与特定套接字相关联。 这是通过使用netsh http add sslcert 。
当我们将(新)证书绑定到套接字(ip +端口)时,使用该套接字的所有站点将使用新证书。
将证书绑定到套接字的命令是: netsh http add sslcert ipport=10.100.0.12:443 certhash=1234567890123456789012345678901234567890 appid={12345678-1234-1234-1234-999999999999}
这部分解释了如何一步一步进行。 它假定您有一些运行即将到期的* .my-domain.com证书的网站(aaa.my-domain.com,bbb.my-domain.com)。 您已经有一个新的证书,您已经安装在服务器上但尚未应用于IIS上的网站。
首先,我们需要找出两件事。 新的certhash和appid。
certhash指定证书的SHA哈希。 这个哈希是20个字节长,并指定为一个hexstring。 appid指定GUID以标识拥有的应用程序,即IIS本身。 执行certutil命令获取机器上的所有证书:
certutil -store My
我不需要所有的信息,所以我需要:
certutil -store My | findstr /R "sha1 my-domain.com ===="
在输出中,您应该可以在服务器上find新的证书:
================ Certificate 5 ================ Subject: CN=*.my-domain.com, OU=PositiveSSL Wildcard, OU=Domain Control Validated Cert Hash(sha1): 12 34 56 78 90 12 34 56 78 90 12 34 56 78 90 12 34 56 78 90
1234567890123456789012345678901234567890是我们正在寻找的certhash 。 它是没有空格的Cert Hash(sha1)。
我们先看看所有的证书套接字绑定 :
netsh http show sslcert
或者特别是一个sockets
netsh http show sslcert ipport=10.100.0.12:443
输出:
SSL Certificate bindings: ---------------------- IP:port : 10.100.0.12:443 Certificate Hash : 1111111111111111111111111111111111111111 Application ID : {12345678-1234-1234-1234-123456789012} Certificate Store Name : MY Verify Client Certificate Revocation : Enabled Verify Revocation Using Cached Client Certificate Only : Disabled Usage Check : Enabled Revocation Freshness Time : 0 URL Retrieval Timeout : 0 Ctl Identifier : (null) Ctl Store Name : (null) DS Mapper Usage : Disabled Negotiate Client Certificate : Disabled
{12345678-1234-1234-1234-123456789012}是我们正在寻找的appid 。 这是IIS本身的应用程序ID。 在这里,你看到的套接字10.100.0.12:443目前仍然绑定到旧的证书(哈希111111111 …)
打开命令提示符并以pipe理员身份运行。 如果不以pipe理员身份运行,则会显示如下错误信息:“请求的操作需要提升(以pipe理员身份运行)”。
首先使用此命令删除当前的证书套接字绑定
netsh http delete sslcert ipport=10.100.0.12:443
你应该得到:
SSL Certificate successfully deleted
然后使用这个命令(在这里find)添加新的证书套接字与appid和certhash(没有空格),你使用这个命令
netsh http add sslcert ipport=10.100.0.12:443 certhash=1234567890123456789012345678901234567890 appid={12345678-1234-1234-1234-123456789012}
你应该得到:
SSL Certificate successfully added
DONE。 您刚刚取代了绑定到此IP +端口(套接字)的所有网站的证书。