如何使用OpenSSL使用OCSP验证证书

时间:2019-05-24 12:08:14

标签: c++ openssl x509certificate pki

我有问题。 我正在使用openssl验证我的证书-x509_verify_cert()。但是此功能不使用ocsp。因此,如果没有crl,这可能是个问题。 在openssl错误中,我找到了这个定义-x509_err_ocsp_verify_needed,但我不知道它的用法。 看来对于我连接到ocsp服务器功能或类似的东西可能存在某种回调。 我也发现,据我了解,我可以将其用于我自己的验证功能,但我只需要ocsp检查。

所以我的问题是:可以问openssl使用ocsp进行验证吗?

2 个答案:

答案 0 :(得分:0)

有可能:

openssl ocsp -issuer certchain.pem -cert cert.pem -text -url <the ocsp responder URL>

一些指向文章链接的详细信息:

https://raymii.org/s/articles/OpenSSL_Manually_Verify_a_certificate_against_an_OCSP.html

https://akshayranganath.github.io/OCSP-Validation-With-Openssl/

答案 1 :(得分:0)

OpenSSL API不提供单个API来进行OCSP验证。 OpenSSL API提供了原语,因此您可以实现自己的验证。您需要填写实现的详细信息,这可能取决于您要解决的情况。

我建议您了解openssl ocsp命令,作为您理解的基础。阅读Sanjeev答案中的链接,还提供了使用此命令的示例。

要实施OCSP验证,您需要:

  1. 从某处提取服务器和颁发者证书(最有可能建立SSL连接)
  2. 从服务器证书中提取OCSP服务器列表
  3. 使用服务器和颁发者证书生成OCSP请求
  4. 将请求发送到OCSP服务器并获得响应
  5. (可选)验证响应
  6. 提取证书状态

(可选)您还可以缓存响应更新日期范围内的结果,以便在再次看到证书时可以简化上述过程。

您还可以将同一台OCSP服务器上的一堆服务器证书也分组为一个请求。

值得注意的是,OCSP服务器链接可能不是HTTP,并且您可能需要支持证书可能具有的任何链接类型。例如,在Windows AD企业设置中,服务器OCSP可能仅具有LDAP OCSP服务器链接。

您可能还希望看到我的answer这个问题,在这里我将讨论OCSP请求和响应处理的代码示例。

更新:

如果要检查整个链,则必须一次执行上述一个证书(尽管证书操作可以重叠)。据我所知,无法立即检查整个链条。另外,您可能会发现许多中间证书仍然不提供OCSP链接,因此无法进行检查。如果您需要这样做,那么最好缓存结果,因为您将始终遇到相同的中间证书。实际上,您可以计划一直针对您一直遇到的“已知”中间证书进行此操作。

您还继续指着我引用的“ x509_verify_cert

  

应用程序很少直接调用此函数,但是它由   内部使用OpenSSL进行证书验证,包括S / MIME和   SSL / TLS代码。

所以您无论如何都不应该这样称呼自己。

  

似乎我连接到ocsp服务器功能可能存在某种回调。

  

在openssl错误中,我找到了这个定义-x509_err_ocsp_verify_needed

X509_V_ERR_OCSP_VERIFY_NEEDED已定义,并且从未在openssl代码库中使用。它旨在从用户提供的验证回调函数(即X509_STORE_CTX_set_verify_cb)中返回,以指示验证应因该错误而失败。您将如何处理这些信息取决于您自己。如果提供回调并从openssl SSL连接返回该错误,则SSL连接将终止。

还要注意,如果您添加了一个自定义验证回调,但该回调确实进行了完整的OCSP检查,则会大大降低SSL连接设置的速度。这就是为什么大多数浏览器默认情况下不执行此操作的原因,因为它会大大降低用户体验。