我在本地主机上使用 cURL 的时间最长,突然间我注意到它不再起作用,除非我明确设置选项CURLOPT_SSL_VERIFYPEER
= FALSE
。
我不知道这是如何/何时改变的,但我使用的是 NGINX 和 PHP,我可以验证这不是特定请求主机的特定问题。我收到来自https://site1.com
and的空白回复https://different-site.com
。
有人有什么想法吗?
我在本地主机上使用 cURL 的时间最长,突然间我注意到它不再起作用,除非我明确设置选项CURLOPT_SSL_VERIFYPEER
= FALSE
。
我不知道这是如何/何时改变的,但我使用的是 NGINX 和 PHP,我可以验证这不是特定请求主机的特定问题。我收到来自https://site1.com
and的空白回复https://different-site.com
。
有人有什么想法吗?
感谢 Dave Chen 的建议,我意识到我一定是放错了我的证书。该问题由 cURL 创建者(从 Mozilla 提取)提供的证书解决:https ://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");
或者,这可以通过将以下内容添加到您的 php.ini 来全局设置
curl.cainfo=/path/to/cacert.pem
如果您使用的是 WampServer,请注意:
您必须将绝对路径放在 CURLOPT_CAINFO 中,例如:
curl_setopt ($ch, CURLOPT_CAINFO, 'C:\wamp\www\your-project\cacert.pem')
不要使用相对路径: curl_setopt ($ch, CURLOPT_CAINFO, 'cacert.pem')因为它不起作用。
从 cURL 7.10 开始,默认情况下 CURLOPT_SSL_VERIFYPEER 的值是 TRUE。
因此,您可能需要将其显式设置为 FALSE 以防止 CURL 验证证书。