由于某种原因,我无法将 CURL 与 HTTPS 一起使用。在我升级 curl 库之前,一切正常。现在我在尝试执行 CURL 请求时遇到此响应:SSL CA 证书有问题(路径?访问权限?)
根据此处发布的有关相关问题的建议,我尝试执行以下操作:
禁用主机和对等方的验证
curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
启用
CURLOPT_SSL_VERIFYPEER
并指向从 http://curl.haxx.se/docs/caextract.html 下载的 cacert.pemcurl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
我也尝试对作为我尝试连接的服务器的捆绑 CA 证书提供的 positiveSSL.ca-bundle 执行相同的操作。
使用
curl.cainfo=cacert.pem
编辑 php ini 设置(文件在同一目录中,可供 apache 访问)将
/etc/pki/nssdb
重命名为/etc/pki/nssdb.old
不幸的是,上述方法都无法解决我的问题,并且我经常收到 SSL CA 证书问题(路径?访问权限?)消息。
而且我一开始就不需要这个验证(我知道安全问题)。
还有人有其他建议吗?
更新
在更新到最新的库并重新启动整个机器后,不仅仅是我正在做的 apache 现在似乎又可以工作了!!!
最佳答案
根据文档:要验证主机或对等证书,您需要使用 CURLOPT_CAINFO
选项指定备用证书,或者可以使用 CURLOPT_CAPATH
选项指定证书目录。
还请看CURLOPT_SSL_VERIFYHOST:
- 1 检查 SSL 对等证书中是否存在通用名称。
- 2 检查公用名称是否存在,并验证它是否与提供的主机名匹配。
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
关于PHP CURL CURLOPT_SSL_VERIFYPEER 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15135834/