我正在尝试使用HttpClientHandler.ServerCertificateCustomValidationCallback
. 我x509chain
用我的ChainPolicy
参数构建了我的。
我在本地有我的 CRL (.pem) 文件,我想将其添加到吊销过程中。
我正在考虑做一些类似CRL 验证的事情,使用 distributionPoint oid 导入我X509Certificate
的 an X509Extension
,但我无法理解它。
这是我的一段回调代码
private static Func<HttpRequestMessage, X509Certificate2, X509Chain, SslPolicyErrors, bool>
ServerCertificateCustomValidationCallback()
{
return (sender, cert, chain, sslPolicyErrors) =>
{
X509Certificate2 ca = new X509Certificate2(@"pathToCa\\ca.crt");
X509Chain chai = new X509Chain();
chai.ChainPolicy.ExtraStore.Add(ca);
chai.ChainPolicy.RevocationFlag = X509RevocationFlag.ExcludeRoot;
chai.ChainPolicy.RevocationMode = X509RevocationMode.Online;
chai.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags;
chai.ChainPolicy.VerificationTime = DateTime.Now;
try
{
if (!chai.Build(cert))
{
return false;
}
foreach (X509ChainStatus status in chai.ChainStatus)
{
if (status.Status == X509ChainStatusFlags.UntrustedRoot) continue;
if (status.Status == X509ChainStatusFlags.OfflineRevocation) continue;
if (status.Status == X509ChainStatusFlags.RevocationStatusUnknown) continue;
return false;
}
}
catch (Exception e)
{
throw e;
}
return true;
};
}
感谢您的帮助和澄清