我们碰巧运行暴露的https://
端点的REST API服务。最近我们更改了SSL证书,几个用户(主要是libcurl和Java用户)抱怨说他们不再验证证书,他们的程序拒绝连接到我们的服务。其他用户,包括.NET用户,没有观察到任何问题。 Firefox也很乐意使用该证书在网站上打开页面。如何使用.NET代码执行最难的SSL证书检查?
我们需要手艺一些代码,验证证书之前,我们使用他们在生产中可能最困难的方式。
我制作了一段代码创建一个证书X509Certificate2
对象,然后从它试图X509Chain.Build()
:
var certDataArray = File.ReadAllBytes(path);
var cert = new X509Certificate2(certDataArray, password);
var chain = new X509Chain();
var result = chain.Build(cert);
var status = chain.ChainStatus;
此代码运行好于我们之前的证书(尚未到期)和失败(Build()
返回false
和X509Chain.ChainStatus
包含许多元件 - X509ChainStatusFlags.RevocationStatusUnknown
,X509ChainStatusFlags.PartialChain
,X509ChainStatusFlags.OfflineRevocation
)。所以对于这个特定的证书看起来这个检查就足够了。
是X509Chain.Build()
足以保证我们所有的用户都可以成功地验证证书?是否需要其他检查?
那你的证书中的变化?您是否使用新的CA /发行人? –
@ stephen.vakil新证书来自另一个CA,并且CA基础架构出现问题,导致无法进行彻底验证。真的有关系吗? – sharptooth