我有问题。我正在使用openssl来验证我的cert -x509_verify_cert((。但是此功能不使用OCSP。因此,如果没有CRL,这可能是一个问题。在OpenSSL错误中,我发现此定义-X509_ERR_OCSP_VERIFY_NEDED,但我不明白它是如何使用的。对于我连接到OCSP服务器功能或类似的东西,似乎存在某种回调。我也发现它可以使用我自己的验证函数,但我只想检查ocsp检查。
所以我的问题是:是否可以询问OpenSSL使用OCSP进行验证?
这是可能的:
openssl ocsp -issuer certchain.pem -cert cert.pem -text -url <the ocsp responder URL>
一些文章的链接,其中包括更多详细信息:
https://raymii.org/s/articles/openssl_manaly_verify_a_certificate_against_an_ocsp.html
https://akshayranganath.github.io/ocsp-validation-with-openssl/
openssl api不提供单个API进行OCSP验证。OpenSL API提供了原始词,以便您可以实施自己的验证。您需要填写一些详细信息,这可能取决于您要解决的情况。
我建议您了解OpenSSL OCSP命令,这是您理解的基础。阅读Sanjeev的答案中的链接也为您提供了使用此命令的示例。
要实现OCSP验证,您将需要:
- 从某个地方提取服务器和发行人证书(SSL连接很可能(
- 从服务器证书提取OCSP服务器列表
- 使用服务器和发行人证书生成OCSP请求
- 将请求发送到OCSP服务器并返回响应
- 可选验证响应
- 提取证书状态
可选的是,您还可以使用响应更新日期范围来缓存结果,以便在再次看到证书的情况下捷径上述过程。
您还可以将一堆服务器证书分组到同一OCSP服务器中。
注意是OCSP服务器链接可能不是HTTP,您可能需要支持证书可能具有的任何链接。例如,在Windows AD Enterprise设置中,服务器OCSP可能只有LDAP OCSP服务器链接。
您也可能想查看我对我介绍OCSP请求和响应处理代码示例的问题的回答。
更新:
如果要检查整个链条,则必须一次执行上述证书(尽管证书操作可以重叠(。据我所知,没有办法一次检查整个链条。另外,您可能会发现许多中级证书无论如何都没有提供OCSP链接,因此无法检查。如果您需要执行此操作,那么可以始终遇到相同的中间证书,这将是一个好主意。实际上,您可以安排提前进行此操作,以获取您一直遇到的"已知"中间证书。
您还一直指向" x509_verify_cert"检查我引用:
应用程序很少直接调用此功能,但是 在S/MIME和 SSL/TLS代码。
所以您无论如何都不应该自己打电话。
看来,我连接到OCSP服务器功能或类似的东西可能存在某种回调。
- x509_store_ctx_set_set_verify_cb-用于设置回调以进行您自己的自定义验证 - 在服务器SSL设置中经常使用了很多
- x509_store_ctx_set_ex_data-用于添加回调使用的自定义参数值
- x509_verify_param_set_flags-用于设置标志(例如X509_V_FLAG_CRL_CHECK或X509_V_FLAG_CRL_CHECK_CHECK_ALL( (
在openssl错误中,我发现此定义-x509_er_ocsp_verify_needed
X509_V_ERR_OCSP_VERIFY_NEEDED是定义的,在OpenSSL代码库中从未使用过。它的目的是从用户提供的验证回调函数(即X509_STORE_CTX_SET_VERIFY_CB(返回,以指示验证应在该错误时失败。您对这些信息的作用取决于您。如果您提供回调并从SSL连接将终止的OpenSSL SSL连接返回该错误。
也要注意,如果您确实添加了确实可以进行完整OCSP检查的自定义验证回调,则它将慢慢降低SSL连接设置。这就是为什么大多数浏览器默认情况下不这样做的原因,因为它将用户体验减少了很多。
这对我有用,对我来说是针对Hashicorp Vault服务器的:
openssl ocsp
-noverify
-no_nonce
-issuer pki_root_ca_chain.pem
-cert usercert.pem
-url http://test.this.out:8200/v1/pki/ocsp
上面的命令在每行的末端都有一个空间,除最后一行外。以下是同一命令的单线。
openssl ocsp -noverify -no_nonce -issuer pki_root_ca_chain.pem -cert usercert.pem -url http://test.this.out:8200/v1/pki/ocsp