是的,我看到了很多关于这个的问题,事实上我已经遇到了这个问题并在去年解决了它。这次由于某种原因,解决方案(添加 https://curl.haxx.se/ca/cacert.pem )不起作用。
服务器(我公司的)是一个 node.js 应用程序,我注册了服务器私钥、服务器 crt 以及根证书和中间证书(我想?),名称是 DigiCertCA.crt
和 TrustedRoot.crt
。客户端是建立 cURL 连接的 PHP 脚本。在我将 cacert.pem 添加到 php.ini 后,它一直运行良好。最近,我的公司更新了 SSL 证书,大约在同一时间,客户端 PHP 脚本(另一家公司的)从开发人员转移到生产服务器。然后 SSL 又坏了。
用 chrome 打开时网站看起来很好(安全 https,未损坏)。这是 PHP 脚本,经过简化以演示问题。我尝试通过 php.ini 和 curl_setopt 添加 cacert.pem,但没有成功。这是在我的本地开发机器上运行的,Windows 10 和 xampp 5.6.3
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com');
curl_setopt($ch, CURLOPT_CAINFO, 'D:/xampp/php/extras/ssl/cacert.pem');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
$content = trim(curl_exec($ch));
if (curl_errno($ch)) {
$content = 'ERROR -> ' . curl_errno($ch) . ': ' . curl_error($ch);
}
curl_close($ch);
print $content;
错误信息:
60: SSL certificate problem: unable to get local issuer certificate
附加信息:
生产 PHP 脚本的错误消息实际上是不同的,它说
curl: (60) Peer's Certificate issuer is not recognized.
我还尝试使用 curl 使用我公司的证书访问其他子域,它们都给出相同的错误 60。访问 https://twitter.com
是可以的
最佳答案
我觉得你搞错了
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
你保持了这个true
,所以这似乎是问题所在
关于PHP curl 错误 60,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45344114/