我已经提取了ASN1格式的PKCS#7,我想验证它的证书链(这意味着每个证书均由其上的证书从根到叶正确签名)。
openssl中有以下API:
int PKCS7_verify(PKCS7 *p7,
STACK_OF(X509) *certs,
X509_STORE *store,
BIO *indata,
BIO *out,
int flags);
但是,我没有受信任的证书存储。
我有一个单独的功能,可以验证根证书的完整性,对我来说就足够了。
假设我已经信任根证书,为什么我需要商店证书结构来验证链是否已正确签名?
谢谢
答案 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()
调用的参数。