cURL要求CURLOPT_SSL_VERIFYPEER = FALSE

tim*_*son 19 php ssl https curl ssl-certificate

我在本地主机上使用cURL的时间最长,突然之间我注意到它不再有效,除非我明确地设置了选项,CURLOPT_SSL_VERIFYPEER= FALSE.

我不知道如何/何时更改但我正在使用NGINX和PHP,我可以验证这不是特定请求主机的特定问题.我https://site1.com和他的回复都是空白的https://different-site.com.

有人有什么想法?

tim*_*son 36

感谢Dave Chen的建议,我意识到我必须放错了我的证书.这个问题由cURL创建者提供的证书解决:http://curl.haxx.se/ca/cacert.pem

因此,在将此cacert.pem文件下载到您的项目后,在PHP中,您现在可以执行以下操作:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem");
Run Code Online (Sandbox Code Playgroud)

或者,可以通过在php.ini中添加以下内容来全局设置

curl.cainfo=/path/to/cacert.pem
Run Code Online (Sandbox Code Playgroud)

  • 我不是安全专家,但下载.pem文件格式不安全源(http :)可以信任吗? (8认同)

Lui*_*dox 5

如果您使用的是 WampServer,请注意:

您必须将绝对路径放在 CURLOPT_CAINFO 中,例如:

curl_setopt ($ch, CURLOPT_CAINFO, 'C:\wamp\www\your-project\cacert.pem')
Run Code Online (Sandbox Code Playgroud)

不要使用相对路径: curl_setopt ($ch, CURLOPT_CAINFO, 'cacert.pem')因为它不起作用