在openssl中正确使用OCSP_basic_verify()的方法是什么?

3
我一直在参考 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 是根证书颁发机构还是中间证书颁发机构?如果是后者,你可以尝试提供完整的链路直到自签名/根证书... - Castaglia
1
@Castaglia:问题实际上是OCSP_basic_verify函数会一直循环,直到找到根证书为止。但由于我添加的证书只是中间证书,所以验证失败了。一旦我添加了整个证书链,OCSP_basic_verify函数就开始正常执行了。 - learn_develop
1个回答

1

根据@Castaglia提供的答案。

问题实际上是OCSP_basic_verify一直循环,直到找到根CA。但由于我添加的证书只是中间证书,因此验证失败。一旦我添加了整个证书链,OCSP_basic_verify调用开始正常运行。


你好,你对以下问题有了解吗:https://stackoverflow.com/questions/48441000/ocsp-response-verification - rotringuser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接