验证PKCS#7格式的证书链

时间:2018-11-07 15:57:15

标签: openssl x509 pkcs#7 asn1

我已经提取了ASN1格式的PKCS#7,我想验证它的证书链(这意味着每个证书均由其上的证书从根到叶正确签名)。

openssl中有以下API:

int PKCS7_verify(PKCS7 *p7, 
                 STACK_OF(X509) *certs, 
                 X509_STORE *store, 
                 BIO *indata, 
                 BIO *out, 
                 int flags);

但是,我没有受信任的证书存储。

我有一个单独的功能,可以验证根证书的完整性,对我来说就足够了。

假设我已经信任根证书,为什么我需要商店证书结构来验证链是否已正确签名?

谢谢

1 个答案:

答案 0 :(得分:1)

  

问题是为什么我需要商店才能验证链条是否正确签名?

您不一定需要一个store参数,您也可以将其设置为NULL,只需验证签名即可,而不必验证整个证书链。在这种情况下,您应该使用PKCS7_NOVERIFY标志,如manual for PKCS7_verify()中所述。但是,如果您确实也想验证证书链,则将不得不提供某种机制来告诉OpenSSL您信任根证书,而X509_STORE是实现此目的的一种方法。

  

但是,我没有受信任的证书存储。

从您的问题来看,您所处的状况还不是很清楚。但是您确实写过,您具有一个单独的功能来“验证根证书的完整性”。

在这种情况下,您可以使用X509_STORE_new()实例化一个X509_STORE对象,并向其中添加受信任的证书。在setup_verify()函数中,OpenSSL源代码树中有一个示例,该示例适用于文件中有受信任证书的情况。或者,如果更适合您的目的,则可以使用X509_STORE_add_cert()。添加该受信任证书之后,可以将存储用作您的PKCS7_verify()调用的参数。