我有一个使用 http 而不是 https 的网站。当我现在使用 cURL
时,http 版本获得 http_code = 200
。当我现在使用 https 版本时,它得到 0
,这没关系,因为该站点没有 https 版本。但问题是,ssl_verifiy_result 为 0,这意味着:
操作成功
来源:http://www.openssl.org/docs/apps/verify.html#VERIFY_OPERATION
这是为什么?
最佳答案
这确实是 openSSL 中的一个错误。此功能仅在您具备以下条件时才有用:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
另见:
如果没有提供对等证书,则返回的结果代码为 X509_V_OK。这是因为没有出现验证错误,但并不表示成功。 SSL_get_verify_result() 仅在与 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/
关于php - ssl_verify_result 为 0,当没有可用的 https 版本时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21377200/