c# - X509Certificate2.Verify() 出错但证书正在工作
问题描述
我的经验是有一个可选的显式证书验证,以在证书验证失败时获得更详细的信息。通常,错误是非常肤浅的,没有明确的验证。
到目前为止,这一切正常,并且在某些情况下有所帮助,但现在此代码返回验证错误。但是当显式验证被禁用时,证书工作正常。
证书链中的错误 [RevocationStatusUnknown] [吊销功能无法检查证书的吊销。]。
证书链中的错误 [OfflineRevocation] [由于吊销服务器脱机,吊销功能无法检查吊销。]。
如果启用,这是处理显式验证的代码:
var runValidation = true;
X509Certificate2 certificate = null;
var store = new X509Store("storename", "storelocation");
store.Open(OpenFlags.ReadOnly);
var certs = store.s.Find(X509FindType.FindBySubjectDistinguishedName, "dn", false);
var e = certs.GetEnumerator();
while (e.MoveNext())
{
certificate = e.Current;
break;
}
if (!runValidation) { return certificate; }
var valid = certificate.Verify();
if (!valid)
{
var chain = new X509Chain();
if (!chain.Build(certificate))
foreach (var status in chain.ChainStatus)
loggingService.Error($"Error in certificate-chain [{status.Status}] [{status.StatusInformation}].");
return null;
}
return certificate;
该证书用于验证客户端:
var request = WebRequest.CreateHttp("url");
// ... further settings ...
var cert = FunctionToGetCertWithCodeAbove();
request.ClientCertificates.Add(cert);
我不明白为什么显式验证失败但无论如何证书都在工作。
解决方案
这似乎是一个基础设施问题。应用程序工作正常。
推荐阅读
- ruby-on-rails - 尝试将omniauth facebook与rails集成并部署到heroku时无法登录
- java - 掷两个骰子得到 7
- batch-file - 批处理文件似乎没有正确调用其他批处理文件
- python - 如何设置记录优先级以显示 HTML?
- python - 如何让我的网站“联系我”表格到达我的 Gmail?
- reporting-services - Power BI Embedded:在 RLS 中使用哈希值?
- c - 在 C 中读取输入文件
- json - 结构中的 json 标记真的需要编组吗?
- git - Git避免通过本地配置将新分支推送到远程
- r - 使包含要重新绑定的数据帧的新变量的更快方法