Windows-Server-2008-R2

在 IIS 7.5 上一次替換多個站點上的萬用字元證書(使用命令行)

  • September 17, 2018

我有 3 個網站:aaa.my-domain.combbb.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 的證書開始: 在 IIS 7.5 中編輯站點綁定視窗

但是當我按 OK 時,我收到以下錯誤:

————————————— 編輯站點綁定 ——————– ——–

至少一個其他站點正在使用相同的 HTTPS 綁定,並且該綁定配置了不同的證書。您確定要重用此 HTTPS 綁定並重新分配其他站點或站點以使用新證書嗎?

————————– 是 否 ——— ——

當我點擊Yes時,我收到以下消息:

————————————— 編輯站點綁定 ——————– ——–

與此綁定關聯的證書也分配給另一個站點的綁定。編輯此綁定將導致其他站點的 HTTPS 綁定不可用。你還想繼續嗎?

————————– 是 否 ——— ——

此消息告訴我https://bbb.my-domain.com>和<https://ccc.my-domain.com將無法使用。至少在我完成替換這兩個域的證書之前,我將有停機時間,對吧?

我在想必須有一個更聰明的方法來做到這一點。可能通過命令行一次將萬用字元證書替換為所有網站的新證書。我在網上找不到任何關於如何做到這一點的資源。有任何想法嗎?

與萬用字元和綁定相關的網站:

與從命令行綁定證書相關的站點:

答案的上下文是 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

1234567890123456789012345678901234567890certhash我們要找的。它是沒有空格的證書雜湊(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)的網站的證書。

引用自:https://serverfault.com/questions/610841