ssl_verify_result为0,表示没有可用的https版本

kuarbcqp  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(164)

我有一个使用http而不是https的站点。当我现在使用cURL时,http版本得到http_code = 200。当我现在使用https版本时,它得到0。这是好的,因为没有https版本的站点。但问题是,ssl_verifiy_result是0,这意味着:
手术成功
来源:http://www.openssl.org/docs/apps/verify.html#VERIFY_OPERATION
为什么会这样呢?

h79rfbju

h79rfbju1#

这确实是openSSL中的一个bug。此功能仅在以下情况下有用:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
另请参阅:
If no peer certificate was presented, the returned result code is X509_V_OK. This is because no verification error occurred, it does however not indicate success. SSL_get_verify_result() is only useful in connection with SSL_get_peer_certificate(3).
http://www.openssl.org/docs/ssl/SSL_get_verify_result.html#bugs
请记住,当您希望cURL连接到SSL并验证证书时,您必须先下载CA证书并将其保存到您的应用程序中(firefox可以做到这一点),然后在cURL调用中引用它。例如:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CACertificats/AddTrustExternalCARoot.crt");

关于这点的小教程:http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

相关问题