我正在考虑使用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,但我不愿意。
答案 0 :(得分:0)
据我所知,默认验证功能是 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
中,只需直接访问此可变数据。