如何获取和安装根CA证书

时间:2013-01-18 16:15:16

标签: c# .net ssl ssl-certificate x509certificate

我遇到了SslStream.AuthenticateAsClient需要“长时间”(~15s)的问题。这是一个已知问题,在MSDN blog post中进行了解释。

它提供了两种可能的解决方案

  

总结一下,这种行为是设计的。我们的选择是:1)   在本地安装根CA证书,这样我们就不需要去了   Internet用于受信任的根CA证书列表。 2)禁用   自动根证书通过GPO更新功能,所以我们不去   互联网无论如何。

从安全角度来看,我被告知选项2不是一个好主意,所以我需要做选项1.

问题是我不知道如何获得根CA证书。一旦我拥有它,我可能会弄清楚如何使用certutil来安装它。

我可以在这个函数中破坏我的执行

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

        }

所以我想我的问题是:

如何获得根CA证书? 我需要哪些信息才能获得它? 我从哪里获得这些信息?

1 个答案:

答案 0 :(得分: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标准中找到详细信息),此代码不会为您提供根CA证书的URL。您需要解析并获取URL。正如我所说,授权信息访问是一个可选扩展,但如果它存在,您会注意到可以在控制台中读取Root Ca Certficate的URL。