【发布时间】:2023-06-20 10:47:01
【问题描述】:
我正在阅读Support Certificates In Your Applications With The .NET Framework 2.0,试图确定如何为 SSL 连接设置 CA。
Validating Certificates下的文章写到一半,MSDN 给出了一些代码:
static void ValidateCert(X509Certificate2 cert)
{
X509Chain chain = new X509Chain();
// check entire chain for revocation
chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
// check online and offline revocation lists
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online |
X509RevocationMode.Offline;
// timeout for online revocation list
chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 30);
// no exceptions, check all properties
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
// modify time of verification
chain.ChainPolicy.VerificationTime = new DateTime(1999, 1, 1);
chain.Build(cert);
if (chain.ChainStatus.Length != 0)
Console.WriteLine(chain.ChainStatus[0].Status);
}
然后:
// override default certificate policy
ServicePointManager.ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback(VerifyServerCertificate);
我觉得我错过了一些非常明显的东西。例如,我不想要回调 - 我只想说,“建立 SSL 连接,这是要信任的 CA”。但我在上面的代码中没有看到。
X509Chain 似乎没有 add 方法来添加 CA 或信任根。 CA不应该在回调之前设置吗?但我在上面的代码中没有看到。
在 Java 中,在加载您要使用的特定 CA(例如,请参阅 Use PEM Encoded CA Cert on filesystem directly for HTTPS request?)后使用 TrustManager(或 TrustManagerFactory)来完成。
问题:如何设置 CA 以用于 .Net 或 C# 中的 SSL 连接?
【问题讨论】:
标签: c# validation ssl x509certificate ca