X509Certificate2.Verify() 出错但证书正在工作
Posted
技术标签:
【中文标题】X509Certificate2.Verify() 出错但证书正在工作【英文标题】:X509Certificate2.Verify() runs into error but certificate is working 【发布时间】:2021-10-27 10:32:59 【问题描述】:我的经验是有一个可选的显式证书验证,以在证书验证失败时获得更详细的信息。通常,错误是非常肤浅的,没有明确的验证。
到目前为止,这一切正常并在某些情况下有所帮助,但现在此代码返回验证错误。但是当显式验证被禁用时,证书工作正常。
证书链中的错误 [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);
我不明白为什么显式验证失败,但无论如何证书都在工作。
【问题讨论】:
您是否偶然在防火墙后面操作? 很可能,证书在服务器上被忽略或服务器忽略客户端证书验证错误。如果再晚一点,那么您的应用程序存在严重缺陷。 我完全同意,如果忽略验证错误,我的应用程序将存在严重缺陷。我没有更改任何验证规则。关于防火墙:我确定有防火墙,因为它是一个大公司网络。 HttpWebRequest.GetResponse() 是否对客户端证书进行任何验证? 【参考方案1】:这似乎是一个基础设施问题。应用程序运行良好。
【讨论】:
以上是关于X509Certificate2.Verify() 出错但证书正在工作的主要内容,如果未能解决你的问题,请参考以下文章
X509Certificate2.Verify() 出错但证书正在工作
X509Certificate2.Verify()行为首次使用