我正在阅读使用 .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 之后使用TrustManager
(或TrustManagerFactory
) 来完成(例如,请参阅在文件系统上直接使用 PEM 编码的 CA 证书来处理 HTTPS 请求?)。
问题:如何设置 CA 以用于 .Net 或 C# 中的 SSL 连接?