在 IIS 7.5 上一次替換多個站點上的萬用字元證書(使用命令行)
我有 3 個網站:
aaa.my-domain.com
,bbb.my-domain.com
並且都在 IIS 7.5 Windows Server 2008R2 64 位上ccc.my-domain.com
使用單個萬用字元證書。*.my-domain.com
該證書將在一個月內到期,*.my-domain.com
我的伺服器上已準備好新的萬用字元證書。我希望所有這些域都使用新的萬用字元證書,而不會出現明顯的停機時間。
我通過 UI 嘗試了通常的做法,從替換 aaa.my-domain.com 的證書開始:
但是當我按 OK 時,我收到以下錯誤:
————————————— 編輯站點綁定 ——————– ——–
至少一個其他站點正在使用相同的 HTTPS 綁定,並且該綁定配置了不同的證書。您確定要重用此 HTTPS 綁定並重新分配其他站點或站點以使用新證書嗎?
————————– 是 否 ——— ——
當我點擊Yes時,我收到以下消息:
————————————— 編輯站點綁定 ——————– ——–
與此綁定關聯的證書也分配給另一個站點的綁定。編輯此綁定將導致其他站點的 HTTPS 綁定不可用。你還想繼續嗎?
————————– 是 否 ——— ——
此消息告訴我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
與從命令行綁定證書相關的站點:
答案的上下文是 IIS 7 實際上並不關心證書綁定。IIS 7 僅將網站綁定到一個或多個套接字。每個套接字都是 IP + 埠的組合。來源:IIS7 從命令行向站點添加證書
所以,我們要做的是在 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 上的網站。
首先,我們需要找出兩件事。您的新證書的 certash 和 appid。
certhash
指定證書的 SHA 雜湊。此散列長度為 20 個字節,並指定為十六進製字元串。appid
指定 GUID 以標識擁有的應用程序,即 IIS 本身。找到證書
執行
certutil
命令獲取機器上的所有證書:
certutil -store My
我不需要所有資訊,所以我這樣做:
certutil -store My | findstr /R "sha1 my-domain.com ===="
在輸出中,您應該會在您的伺服器上找到您的新證書:
================ 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
我們要找的。它是沒有空格的證書雜湊(sha1)。找到應用程序
讓我們從查看所有證書套接字綁定開始:
netsh http show 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
目前仍綁定到舊證書(雜湊 111111111…)將(新)證書綁定到套接字
打開命令提示符並以管理員身份執行它。如果您不以管理員身份執行它,您將收到如下錯誤:“請求的操作需要提升(以管理員身份執行)。”
首先使用此命令刪除目前的證書套接字綁定
netsh http delete sslcert ipport=10.100.0.12:443
你應該得到:
SSL Certificate successfully deleted
然後使用此命令(在此處找到)添加新的證書套接字綁定,其中包含您之前使用此命令找到的 appid 和 certash(不帶空格)
netsh http add sslcert ipport=10.100.0.12:443 certhash=1234567890123456789012345678901234567890 appid={12345678-1234-1234-1234-123456789012}
你應該得到:
SSL Certificate successfully added
完畢。你剛剛替換了所有綁定到這個IP+埠(socket)的網站的證書。