我希望所有这些域都使用新的通配符证书,而不会出现明显的停机时间.
我尝试通过UI开始替换aaa.my-domain.com的证书:
但是当我按OK时,我收到以下错误:
————————— Edit Site Binding —————————
At least one other site is using the same HTTPS binding and the binding is configured with a different certificate. Are you sure that you want to reuse this HTTPS binding and reassign the other site or sites to use the new certificate?
————————— Yes No —————————
当我单击是时,我收到以下消息:
————————— Edit Site Binding —————————
The certificate associated with this binding is also assigned to another site’s binding. Editing this binding will cause the HTTPS binding of the other site to be unusable. Do you still want to continue?
————————— Yes No —————————
此消息告诉我https://bbb.my-domain.com和https://ccc.my-domain.com将无法使用.至少在我为这两个域名替换证书之前,我会有停机时间,对吧?
我当时认为必须有一种更聪明的方法.可能通过命令行一次替换所有网站的新通配符证书.我在网上找不到任何关于如何做到这一点的资源.有任何想法吗?
> http://www.diaryofaninja.com/blog/2010/09/01/binding-multiple-domains-to-a-wildcard-ssl-on-a-single-ip-in-iis-75
> http://www.computer-howto.com/2011/08/running-multiple-ssl-iis-sites-iis7-75/
> https://stackoverflow.com/questions/3895675/how-to-install-wildcard-ssl-cert-on-iis-7-5
> http://blogs.msdn.com/b/asiatech/archive/2010/12/27/setting-up-a-wildcard-certificate-in-iis-7-how-to-avoid-those-certificate-mismatch-errors.aspx
与命令行绑定证书相关的站点:
> IIS7 add certificate to site from command line
> https://stackoverflow.com/questions/591597/how-to-assign-a-ssl-certificate-to-iis7-site-from-command-prompt
因此,我们想要做的是在OS层上进行证书重新绑定.操作系统层控制SSL部分,因此您使用netsh将证书与特定套接字关联.这是通过netsh使用netsh http add sslcert完成的.
当我们将(新)证书绑定到套接字(ip端口)时,使用该套接字的所有站点都将使用新证书.
将证书绑定到套接字的命令是:
netsh http add sslcert ipport = 10.100.0.12:443 certhash = 1234567890123456789012345678901234567890 appid = {12345678-1234-1234-1234-999999999999}
如何
本部分介绍了如何逐步进行.它假设您有一些网站(aaa.my-domain.com,bbb.my-domain.com)运行即将过期的* .my-domain.com证书.您已经拥有一个已安装在服务器上但尚未应用于IIS上的网站的新证书.
首先,我们需要找出两件事.您的新证书和appid的certhash.
> certhash指定证书的SHA哈希.此哈希长度为20个字节,并指定为十六进制字符串.
> appid指定用于标识拥有应用程序的GUID,即IIS本身.
找到certhash
执行certutil命令以获取计算机上的所有证书:
certutil -store我的
我不需要所有信息,所以我这样做:
certutil -store我的| findstr / R“sha1 my-domain.com ====”
在输出中,您应该在服务器上找到新证书:
================证书5 ================
主题:CN = * .my-domain.com,OU = PositiveSSL通配符,OU =域控制验证
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).
找到appid
让我们从looking at all certificate-socket bindings开始:
netsh http显示sslcert
或者特别是一个插座
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目前仍然绑定到旧证书(Hash 111111111 …)
将(新)证书绑定到套接字
打开命令提示符并以管理员身份运行它.如果您不以管理员身份运行它,您将收到如下错误:“请求的操作需要提升(以管理员身份运行).”
netsh http delete sslcert ipport = 10.100.0.12:443
你应该得到:
SSL证书已成功删除
然后使用此命令(找到here)使用此命令添加新的证书套接字绑定以及之前找到的appid和certhash(不带空格)
netsh http add sslcert ipport = 10.100.0.12:443 certhash = 1234567890123456789012345678901234567890 appid = {12345678-1234-1234-1234-123456789012}
你应该得到:
SSL证书已成功添加
DONE.您刚刚更换了绑定到此IP端口(套接字)的所有网站的证书.