我正在考虑使用Windows系统存储库(通过SSL_CTX_set_cert_verify_callback)覆盖默认的证书验证过程。该应用程序是一个Web客户端,我需要接受添加到系统存储中的全公司范围的自签名证书。
一旦我有了一个(可能不完整的)链,我
但是X509_STORE_CTX_get1_chain()返回受信任的链,只有在X509_verify_cert()运行之后才能使用。
我需要的是X509_STORE_CTX ::: untrusted(仅包含来自握手的证书),但显然没有通过API导出。
我可以将最终证书传递给WinCrypt,但这意味着要下载我要避免的中间证书。
我的问题是,我是否正在做一些倒退?我应该让openssl构建链并进行验证,然后使用WinCrypt重做吗?好像很恶心我可以添加X509_STORE_CTX_get_untrusted()函数并重建libeay32.dll,但我宁愿不这样做。
据我所知,默认验证功能是X509_verify_cert。如果您没有设置自己的验证回调(使用SSL_CTX_set_cert_verify_callback
),则会调用此函数。它在crypto / x509 / x509_vfy.c中定义。我建议您查看此函数的源代码,以弄清楚您应该如何说服OpenSSL进行协作(例如正确返回错误代码)。
我希望有帮助。
P.S。看起来您是对的:X509_STORE_CTX::untrusted
具有访问器函数,因此它可能是OpenSSL的“私有”内容。在X509_verify_cert
中,可以直接直接访问此变量。