我一直在参考 https://github.com/openssl/openssl/blob/master/apps/ocsp.c 来创建自己的OCSP实现,并在收到来自OCSP响应器的OCSP基本响应后进行验证。但是,无论我运行多少次迭代,都会出现错误
对于上面的代码,我一直得到
error:27069065:OCSP routines:OCSP_basic_verify:certificate verify error:ocsp_vfy.c:138:Verify error:unable to get issuer certificate
。请注意,我具有要验证的证书和发行者证书的X509数据,并且我正在使用以下代码验证响应: OCSP_BASICRESP *br = OCSP_response_get1_basic(resp); // where resp is the response received.
STACK_OF(X509)* certs = sk_X509_new_null();
if (!sk_X509_push(certs, issuer)) // issuer X509 known
printf("Failed to add issuer");
X509_STORE* store = X509_STORE_new();
X509_LOOKUP *lookup;
lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());
X509_STORE_add_cert(store,issuer);
ret_val = OCSP_basic_verify(br, certs, store, 0);
if (ret_val <= 0) {
printf("Response Verify Failure: %d", ret_val);
对于上面的代码,我一直得到
ret_val
为0,并记录了上述错误。然而,我从OCSP响应者那里得到了正确的响应,证书状态良好。唯一剩下的问题是修复对OCSP_basic_verify
的调用。有人能指出我可能犯了什么错误吗?谢谢。
issuer
是根证书颁发机构还是中间证书颁发机构?如果是后者,你可以尝试提供完整的链路直到自签名/根证书... - CastagliaOCSP_basic_verify
函数会一直循环,直到找到根证书为止。但由于我添加的证书只是中间证书,所以验证失败了。一旦我添加了整个证书链,OCSP_basic_verify
函数就开始正常执行了。 - learn_develop