cURL称证书已过期,Firefox不同意

时间:2014-07-30 22:01:38

标签: ssl curl openssl

我正在尝试通过cURL访问内部网站(几天前我可以访问)。但是,cURL会给出错误curl: (60) SSL certificate problem: certificate has expired。如果我使用openssl来检查证书的开始日期和结束日期,那么它会给出一个我很好的时间范围:

echo | openssl s_client -connect internalsite.example.com:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Nov 30 00:00:00 2012 GMT
notAfter=Mar 30 12:00:00 2016 GMT
# For reference, the day I'm posting this is July 30th, 2014

此外,如果我在另一台计算机上使用cURL,或通过浏览器(Firefox,Chrome或IE)连接,我可以毫无错误地连接。

另外,我无法在自己的电脑上连接任何版本的cURL;这包括Cygwin中的cURL和虚拟机内Ubuntu上的cURL,以及Windows版本。

什么可能导致这种行为?

3 个答案:

答案 0 :(得分:1)

您的证书包可能已过期。

您可以在http://curl.haxx.se/ca/cacert.pem

处获得由卷曲开发人员维护的内容

使用它:

<?
$ch = curl_init("http://example.com");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem');
$response = curl_exec($ch);

答案 1 :(得分:1)

我的curl正在使用存储在以下位置的证书包:

/etc/ssl/certs/ca-certificates.crt

我以前遇到过这个问题,我通过查看curl工作的机器并比较这两台机器上的.crt文件,然后复制丢失的证书来修复它。

我刚刚又遇到了这个问题,我这次修复它只是从新机器上复制整个文件(更新的Ubuntu安装----我遇到问题的机器很古老)。

它有效。

答案 2 :(得分:0)

肮脏又快速的解决方案对我有用:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

它会禁用SSL验证,当然会牺牲安全性。