針對 SSL 相關問題進行疑難解答 (伺服器憑證)
適用於:網際網路資訊服務
概觀
本文可協助您針對與 網際網路資訊服務 (IIS) 相關的安全套接字層 (SSL) 問題進行疑難解答。 它涵蓋用於伺服器驗證的伺服器憑證,而非客戶端憑證。
如果 [用戶端憑證] 區段設定為 [需要 ],而且您遇到問題,本文就不是您應該參考的憑證區段。 本文僅供針對 SSL 伺服器憑證問題進行疑難解答。
請務必知道,每個憑證都包含公鑰(用於加密)和私鑰(用於解密)。 只有伺服器才知道私鑰。
HTTPS 的預設埠為 443。 假設您在 SSL 交握期間精通 SSL 交握和伺服器驗證程式。
此疑難解答員中使用的工具
用來針對各種案例進行疑難解答的工具如下:
- 網路監視器 3.4
- Wireshark
案例
透過 HTTPS 瀏覽網站時,您會看到下列錯誤訊息:
必須檢查的第一個先決條件是網站是否可透過 HTTP 存取。 如果不是,可能還有本文未涵蓋的個別問題。 使用此疑難解答員之前,您必須讓網站在 HTTP 上運作。
現在,假設網站可透過 HTTP 存取,而且當您嘗試瀏覽 HTTPS 時,會顯示先前的錯誤訊息。 因為 SSL 交握失敗,因此會顯示錯誤訊息。 在接下來的幾個案例中,可能會有許多原因詳述。
案例 1
檢查伺服器證書是否有對應的私鑰。 請參閱 [憑證] 對話框的下列螢幕快照:
解決方法
如果遺失私鑰,您需要取得包含私鑰的憑證,這 基本上是 。PFX 檔案。 以下是您可以嘗試執行的命令,以將私鑰與憑證產生關聯:
C:\>certutil - repairstore my "906c9825e56a13f1017ea40eca770df4c24cb735"
如果關聯成功,您會看到下列視窗:
在此範例中, 906c9825e56a13f1017ea40eca770df4c24cb735
是憑證的指紋。 若要取得指紋,請遵循下列步驟:
- 開啟憑證。
- 選取 [詳細資料] 索引標籤。
- 向下捲動以尋找指紋區段。
- 選取指紋區段,然後選取其下方的文字。
- 執行 Ctrl A,然後按 Ctrl++C 來選取並複製它。
注意
命令 certutil
不一定會成功。 如果失敗,您必須從證書頒發機構單位 (CA) 取得包含私鑰的憑證。
案例 2
在此案例中,請考慮您有一個伺服器證書,其中包含安裝在網站上的私鑰。 不過,您會繼續看到案例 1 中顯示的錯誤。 您仍然無法透過 HTTPS 存取網站。
解決方法
如果您有包含私鑰但無法存取網站的憑證,您可能也會在系統事件記錄檔中看到下列 SChannel 警告:
Event Type: Error
Event Source: Schannel
Event Category: None
Event ID: 36870
Date: 2/11/2012
Time: 12:44:55 AM
User: N/A
Computer:
Description: A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x80090016.
這個事件或錯誤表示取得憑證的私鑰時發生問題。 若要解決警告,請遵循下列步驟:
確認 MachineKeys 資料夾的許可權。 所有的私鑰都會儲存在 MachineKeys 資料夾中,因此請確定您擁有必要的許可權。
如果許可權已就緒,且問題仍未修正,則憑證可能會發生問題。 它可能已損毀。 您可能會在下列 SChannel 事件記錄檔中看到 的錯誤碼
0x8009001a
:Event Type: Error Event Source: Schannel Event Category: None Event ID: 36870 Date: 2/11/2012 Time: 12:44:55 AM User: N/A Computer: A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x8009001a.
檢查網站是否使用測試憑證。
取得現有憑證的備份,然後將它取代為自我簽署憑證。
嘗試使用 HTTPS 存取網站。
如果運作正常,先前使用的憑證已損毀,且必須以新的工作憑證取代。 有時候,問題可能不是憑證,而是使用簽發者。 在憑證鏈結的驗證期間,如果根 CA 憑證不受信任,您可能會看到錯誤
CERT_E_UNTRUSTEDROOT (0x800b0109)
。若要修正此錯誤,請將 CA 的憑證新增至 伺服器上的 [我的電腦帳戶] 底下的 [受信任的根 CA 存放區]。 在憑證鏈結的驗證期間,您可能也會收到錯誤
-2146762480(0x800b0110)
。若要解決錯誤,請遵循下列步驟來檢查憑證的使用類型:
- 開啟憑證。
- 選取 [詳細資料] 索引標籤。
- 選取 [ 編輯屬性]。
- 在 [一般] 索引標籤下,確定 已選取 [啟用此憑證 的所有用途] 選項,而且最重要的是, 伺服器驗證 應該會出現在清單中。
案例 3
前兩個案例有助於檢查憑證的完整性。 確認憑證沒有任何問題之後,就會解決大小問題。 但是,如果網站仍然無法透過 HTTPS 存取,該怎麼辦? 檢查網站的 HTTPS 系結,並判斷其正在接聽的埠和 IP。
解決方法
執行下列命令,以確定網站所使用的 SSL 埠上沒有其他進程正在接聽。
netstat -ano" or "netstat -anob"
如果有另一個進程接聽該埠,請檢查該進程為何使用該埠。
請嘗試變更IP-Port組合,以檢查網站是否可存取。
案例 4
現在,您可以確定已在網站上安裝適當的工作憑證,而且沒有其他程式使用此網站的 SSL 埠。 不過,在透過 HTTPS 存取網站時,您可能會看到「無法顯示頁面」錯誤。 當用戶端連線並起始 SSL 交涉時, HTTP.sys搜尋 其 SSL 組態,以尋找用戶端所連線的「IP:Port」組。 HTTP.sys SSL 組態必須包含憑證哈希和證書存儲的名稱,SSL 交涉才會成功。 問題可能是。HTTP.SYS SSL Listener
向 HTTP.sys 註冊的憑證哈希可能是 NULL,也可能包含無效的 GUID。
解決方法
執行以下 命令:
netsh http show ssl
以下是工作和非工作案例的範例:
工作案例
設定 設定 IP:port 0.0.0.0:443 憑證哈希 c09b416d6b 8d615db22 64079d15638e96823d 應用程式識別碼 {4dc3e181-e14b-4a21-b022-59fc669b0914} 證書存儲名稱 My 確認客戶端憑證撤銷 已啟用 撤銷重新整理時間 0 URL 擷取逾時 0 ...... ...... 非工作案例
設定 設定 IP:port 0.0.0.0:443 憑證哈希 應用程式識別碼 {00000000-0000-0000-0000-000000000000} CertStoreName My 確認客戶端憑證撤銷 0 撤銷重新整理時間 0 URL 擷取逾時 0 ...... ...... 工作案例中所見的哈希值是 SSL 憑證的指紋。 請注意,在非工作案例中,GUID 全都是零。 您可能會看到哈希有一些值或空白。 即使您從網站移除憑證,然後執行
netsh http show ssl
,網站仍會將 GUID 列為所有 0。 如果您看到 GUID 為 “{0000...............000}”,則發生問題。執行下列命令來移除這個專案:
netsh http delete sslcert ipport=<IP Address>:<Port>
例如:
netsh http delete sslcert ipport=0.0.0.0:443
若要判斷是否列出任何 IP 位址,請開啟命令提示字元,然後執行下列命令:
netsh http show iplisten
如果命令傳回 IP 位址清單,請使用下列命令移除清單中的每個 IP 位址:
netsh http delete iplisten ipaddress=<IP Address>
注意
使用
net stop http /y
命令重新啟動 IIS。
案例 5
儘管如此,如果您仍然無法在 HTTPS 上瀏覽網站,請從用戶端或伺服器擷取網路追蹤。 依 「SSL 或 TLS」 篩選追蹤,以查看 SSL 流量。
以下是非工作案例的網路追蹤快照:
以下是工作案例的網路追蹤快照:
這是您查看網路追蹤的方法。 您需要展開框架詳細數據,並查看伺服器選擇的通訊協定和加密。 從描述中選取 「Server Hello」,以檢視這些詳細數據。
在非工作案例中,用戶端已設定為僅使用 TLS 1.1 和 TLS 1.2。 不過,IIS 網頁伺服器已設定為支援 TLS 1.0,因此交握失敗。
檢查登錄機碼,以判斷哪些通訊協定已啟用或停用。 以下是路徑:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
[ 已啟用 的 DWORD] 應該設定為 1。 如果設定為 0,則會停用通訊協定。
例如,預設會停用SSL 2.0。