无需将证书安装到证书存储中即可执行X509证书吊销检查

时间:2018-12-06 01:38:57

标签: .net x509certificate

我正在考虑将用户证书与根证书进行比较。如果我在Windows存储中安装了根证书,则一切正常。但是,对于我的应用程序,无法在商店中安装证书。

当我不安装证书时,我将获得预期的UntrustedRoot状态,但同时也会获得RevocationOffline和RevocationStatusUnknown。

据我了解,吊销检查仅在以可信根存储中的自签名证书结尾的链上执行。调用chain.Build之后,还有另一种方法来进行吊销检查吗?还是我可以在Build之前设置任何内容,以便它仍以不受信任的根目录执行检查?我试图避免使用第三方库。

我有

X509Chain chain = new X509Chain
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online
chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;

chain.ChainPolicy.ExtraStore.Add(root);
isValid = chain.Build(certificate);

// Check Byte Code
var chainRoot = chain.ChainElements[chain.ChainElements.Count - 1].Certificate;
isValid = isValid && chainRoot.RawData.SequenceEqual(root.RawData);

1 个答案:

答案 0 :(得分:0)

使用纯.Net是不可能的,您需要使用CryptoAPI互操作。基本上,您需要调用CertCreateCertificateChainingEngine函数。该函数接受pConfig参数,该参数是指向CERT_CHAIN_ENGINE_CONFIG结构的指针,您可以在hRestrictedRoots字段中配置一组受信任的根。如有必要,配置其他字段。在CertCreateCertificateChainingEngine函数调用之后,您将获得指向HCERTCHAINENGINE的指针,并将其作为CertGetCertificateChain参数传递给hChainEngine函数。