2013-01-18 111 views
1

我遇到了SslStream.AuthenticateAsClient需要「很長時間」(〜15s)的問題。這是一個已知問題,並在此MSDN blog post中解釋。如何獲取並安裝根CA證書

它給出了兩個可能的解決方案

綜上,此行爲是由設計。我們擁有的選項有:1) 在本地安裝根CA證書,因此我們不需要訪問 Internet以獲取受信任的根CA證書列表。 2)通過GPO禁用 自動根證書更新功能,因此我們在任何情況下都不會訪問互聯網 。

我已經告訴選項2不是從安全角度來看一個偉大的想法,所以我需要做的選項1.

的問題是我不知道如何獲取根CA證書。一旦我有了它,我可以弄清楚如何使用certutil來安裝它。

我能打破我在執行這個功能

private static bool CertificateValidationCallback(
      object oSender, 
      X509Certificate oCertificate, 
      X509Chain oChain, 
      SslPolicyErrors oSslPolicyErrors) 
     { 

     } 

所以我想我的問題(S)是:

如何獲取根CA證書? 我需要什麼信息才能得到它? 我從哪裏得到這些信息?

回答

0

權限信息X509標準的訪問擴展包含根CA證書的位置信息(URL),但它是一個可選字段。

http://tools.ietf.org/html/rfc5280#section-4.2.2.1

var cert = new X509Certificate2(certData); 
var authInfoExtnsions = from ext in cert.Extensions.Cast<X509Extension>() 
         where ext.Oid.Value == "1.3.6.1.5.5.7.1.1" 
         select ext; 
foreach (var authInfoExtnsion in authInfoExtnsions) 
{ 
    Console.WriteLine(Encoding.UTF8.GetString(authInfoExtnsion.RawData)); 
} 

authInfoExtnsion.RawData是一個複雜的ASN.1結構(您可以在X509標準細節)和驗證碼不會給你根的URL CA證書。您需要解析並獲取URL。正如我所說權威信息訪問是一個可選的擴展,但如果它是存在的,你會注意到根CA證書的URL可以在控制檯中讀取。