我正在尝试使用wincrypt.h在C ++程序中检查X509证书的吊销状态。可悲的是,我找不到一个全面的例子。在c#中,代码如下:
X509Certificate2 certificate = new X509Certificate2();
//Create X509Certificate2 object from .cer file.
byte[] rawData = ReadFile(@"C:\Users\z002m76a\Desktop\cert.pem");
certificate.Import(rawData);
X509Chain ch = new X509Chain();
ch.ChainPolicy.RevocationMode = X509RevocationMode.Online;
ch.Build(certificate);
Console.WriteLine("Chain revocation flag: {0}", ch.ChainPolicy.RevocationFlag);
在C ++中,您使用CertGetCertificateChain函数。与调用结果一起,该函数返回指向CERT_CHAIN_CONTEXT
的指针(通过ppChainContext
成员)。此CERT_CHAIN_CONTEXT
结构存储一个指向CERT_SIMPLE_CHAIN
结构(rgpChain
成员)的指针,该指针表示链元素的数组(这是.NET中的X509Chain.ChainElements
所表示的)。本质上,您需要检查rgpChain
中的第一个元素,它是指向CERT_SIMPLE_CHAIN
结构的指针。并检查TrustStatus
成员的吊销状态标志(两个标志)。