C# X509Chain.Build()方法说明
我想验证证书链,我得到一个C# X509Chain.Build()方法说明,c#,certificate,x509certificate2,C#,Certificate,X509certificate2,我想验证证书链,我得到一个X509Certificate2集合,并且必须验证是否所有证书都构建了一个链 通常,为了验证证书链,我应该从叶证书中获取数字签名,并检查它是否由根证书签名-,但在.NET中,我找不到从X509Certificate2对象提取签名的方法 因此,我考虑按以下方式使用X509Chain.Build()方法: void ValidateChain(X509Certificate2Collection collection, X509Certificate2 leaf)
X509Certificate2
集合,并且必须验证是否所有证书都构建了一个链
通常,为了验证证书链,我应该从叶证书中获取数字签名,并检查它是否由根证书签名-,但在.NET中,我找不到从X509Certificate2
对象提取签名的方法
因此,我考虑按以下方式使用X509Chain.Build()
方法:
void ValidateChain(X509Certificate2Collection collection, X509Certificate2 leaf)
{
X509Chain x509Chain = new X509Chain();
x509Chain.ChainPolicy.ExtraStore.AddRange(collection);
bool isValid = x509Chain.Build(leaf);
}
但我对构建方法有一些疑问:
外部商店中构建,我如何定义这种行为
如果有人能向我解释
Build()
方法是如何工作的,我将不胜感激。请尝试以下代码片段:
bool chainIsValid = false;
var chain = new X509Chain();
chain.ChainPolicy.RevocationFlag = X509RevocationFlag.ExcludeRoot;
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 1, 0);
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
chainIsValid = chain.Build(certificate);
您应该在生成操作之后使用CHAINESTATUS值。MSDN: X509Chain对象具有名为CHAINESTATUS的全局错误状态,应用于证书验证。管理证书验证的规则很复杂,并且很容易通过忽略一个或多个相关元素的错误状态来过度简化验证逻辑。全局错误状态考虑链中每个元素的状态
如果您看到第二个问题,提问者希望根证书成为信任链的一部分。因此
X509RevocationFlag.ExcludeRoot
是错误的<代码>X509RevocationFlag。应使用EntireChain。找到解决方案了吗?