c++ 如何利用openssl实现ocsp证书验证

li9yvcax  于 2023-08-09  发布在  其他
关注(0)|答案(3)|浏览(185)

我有个问题。我正在使用openssl验证我的证书- x509_verify_cert()。但是这个函数不使用ocsp。因此,如果没有CRL,这可能是一个问题。在openssl错误中,我发现了这个define - x509_err_ocsp_verify_needed,但我不明白它是如何使用的。似乎存在某种回调函数,用于连接到ocsp服务器函数或类似的东西。我也发现了它,我可以使用,正如我所理解的,为我自己的验证功能,但我只想ocsp检查。
所以我的问题是:是否可以要求openssl使用ocsp进行验证?

mrwjdhj3

mrwjdhj31#

这是可能的:

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/

2admgd59

2admgd592#

OpenSSL API不提供单个API来执行OCSP验证。OpenSSL API提供了原语,因此您可以实现自己的验证。您需要在实现中填写一些细节,这些细节可能取决于您要解决的情况。
我建议您先了解openssl ocsp命令,作为理解的基础。阅读Sanjeev的答案中的链接,您也可以看到使用此命令的示例。
要实施OCSP验证,您需要:
1.从某处提取服务器和颁发者证书(最有可能是SSL连接)
1.从服务器证书中提取OCSP服务器列表
1.使用服务器和颁发者证书生成OCSP请求
1.将请求发送到OCSP服务器并获得响应
1.(可选)验证响应
1.提取证书状态
您也可以选择性地快取具有回应更新日期范围的结果,以便在再次看到凭证时,可以缩短上述程序。
您也可以将一组到同一OCSP服务器的服务器证书组合到一个请求中。
需要注意的是OCSP服务器链接可能不是HTTP,您可能需要支持证书可能具有的任何链接类型。例如,在Windows AD企业设置中,服务器OCSP可能只有LDAP OCSP服务器链接。
您可能还想看看我对一个问题的回答,我将介绍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连接设置的速度。这就是为什么大多数浏览器在默认情况下不这样做,因为它会大大降低用户体验。

lx0bsm1f

lx0bsm1f3#

这对我来说对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

相关问题