如何获取和安装根CA证书

本文关键字:安装 CA 证书 何获取 获取 | 更新日期: 2023-09-27 17:54:08

我有一个问题与SslStream。AuthenticateAsClient耗时"很长"(~15秒)。这是一个已知的问题,在这篇MSDN博客文章中有解释。

给出两种可能的解

总而言之,这种行为是设计出来的。我们的选择有:1)在本地安装根CA证书,这样我们就不需要访问Internet获取受信任的根CA证书列表。2)禁用自动根证书更新功能通过GPO,所以我们不去

有人告诉我,从安全的角度来看,选项2不是一个好主意,所以我需要做选项1。

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

我可以在这个函数中中断执行

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

所以我想我的问题是:

如何获取根CA证书?我需要什么信息才能得到它?我从哪里得到这个信息?

如何获取和安装根CA证书

X509标准的权限信息访问扩展包含根CA证书的位置信息(URL),但它是一个可选字段。

https://www.rfc-editor.org/rfc/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。正如我所说的,权限信息访问是一个可选的扩展,但如果它存在,你会注意到根Ca证书的URL可以在控制台中读取。