验证 PKCS#7 格式的证书链

Validate certificate chain in PKCS#7 format

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

在 openssl 中,有以下 API :

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

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

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

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

谢谢

The question is why do I need the store in order to verify that the chain is properly signed ?

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

However, I don't have a trusted certficate store.

从你的问题来看,你的情况是不是完全清楚。但是你确实写了你有一个单独的函数 "validate the integrity of the root certificate".

在这种情况下,如果更适合您的目的,您可以使用 X509_STORE_new() and add your trusted certificate to it. There is an example in the OpenSSL source code tree of that in the setup_verify() function, which is for the case that the trusted certificate is available in a file. Or you could use X509_STORE_add_cert() 实例化一个 X509_STORE 对象。添加该受信任的证书后,您可以将商店用作 PKCS7_verify() 调用的参数。