验证 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()
调用的参数。
我已经提取了 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()
调用的参数。