在openssl中正确使用OCSP_basic_verify()?

时间:2017-04-10 15:07:13

标签: c++ ssl openssl ocsp

我一直在引用https://github.com/openssl/openssl/blob/master/apps/ocsp.c来创建我自己的OCSP实现,并在我从OCSP响应器收到OCSP Basic响应后验证它。但不知何故,我运行的每次迭代,我都会收到错误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的通话。有人可以指出我可能出错的地方吗?感谢。

1 个答案:

答案 0 :(得分:0)

@Castaglia提供的答案。

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