我正在考虑将用户证书与根证书进行比较。如果我在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);
答案 0 :(得分:0)
使用纯.Net是不可能的,您需要使用CryptoAPI互操作。基本上,您需要调用CertCreateCertificateChainingEngine
函数。该函数接受pConfig
参数,该参数是指向CERT_CHAIN_ENGINE_CONFIG
结构的指针,您可以在hRestrictedRoots
字段中配置一组受信任的根。如有必要,配置其他字段。在CertCreateCertificateChainingEngine
函数调用之后,您将获得指向HCERTCHAINENGINE
的指针,并将其作为CertGetCertificateChain
参数传递给hChainEngine
函数。