Dot-Net

無法為具有主題備用名稱證書的 SSL/TLS 安全通道建立信任關係

  • August 1, 2014

我得到一個 System.Net.WebException

底層連接已關閉:無法為 SSL/TLS 安全通道建立信任關係

內部異常是 System.Security.Authentication.AuthenticationException

根據驗證程序,遠端證書無效

當使用 System.Net.WebClient.DownloadString(String address) 對 www.foo.com 使用 www.bar.com 的證書但 www.foo.com 列在“主題備用名稱”欄位中時。

該證書由 GoDaddy 頒發,因此 Chrome 和 Internet Explorer 在訪問 www.bar.com 時認為證書有效,但在訪問 www.foo.com 時證書沒有問題。

我認為這應該是 WebClient 的有效證書,因為域列在主題備用名稱欄位中,這是正確的嗎?或者 WebClient 是否不使用主題備用名稱欄位來頒發給一個站點但在另一個站點上使用的 SSL 證書?

…這應該是 WebClient 的有效證書,因為域列在主題備用名稱欄位中,這是正確的嗎?

是的,這是正確的。

此外,CN. IETF/RFC 6125CA/Browser ForumsCN均不贊成在其中放置 DNS 名稱。

您應該在其中添加一個友好的名稱,CN因為它是呈現給使用者的。您應該將 DNS 名稱放在SAN.

雖然這種做法已被棄用,但它並沒有被禁止……


或者 WebClient 是否不使用主題備用名稱欄位來頒發給一個站點但在另一個站點上使用的 SSL 證書

根據RFC 6125,第 6.4.4 節,我能說的最好的就是連接www.foo.com並且可以;以及根據 CA/B 的基線要求第 9.2.1 和 9.2.2 節確定。CN=www.bar.com``SAN=www.foo.com

因此,由於我們沒有真實的伺服器 URL 或伺服器的真實證書,因此進行了一些猜測:

  1. WebClient.DownloadString有一個錯誤
  2. 屬性具有意外編碼(例如,IA5STRING而不是UTF8字元串)
  3. Issuer 的編碼與 Subject 的編碼不同(例如,簽名者的 Subject 的 DN 是IA5STRING,而最終實體的 Issuer DN 是一個UTF8字元串)

對於上述猜測,Chrome 和 Internet Explorer 可能比WebClient.DownloadString.

如果(3)是問題,那麼WebClient.DownloadString實際上是正確的。在下面的簽名層次結構中,證書的頒發者 DN 的屬性編碼必須與簽名者的主題 DN 的編碼相同。你不能混合和匹配它們。

在此處輸入圖像描述

上面這張圖是從 Peter Gutmann 的Engineering Security中無恥地抄襲而來的。它可以線上免費獲得,它會教你很多有趣的安全相關的東西。他特別喜歡在 PKI 中戳漏洞,並提供了兩章介紹其在實踐中的實際失敗。

引用自:https://stackoverflow.com/questions/25046156