1

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

在 openssl 中,有以下 API:

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

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

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

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

谢谢

4

1 回答 1

1

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

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

但是,我没有受信任的证书商店。

从你的问题来看,你的情况并不完全清楚。但是您确实写道,您有一个单独的功能来“验证根证书的完整性”。

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

于 2018-11-07T22:40:37.697 回答