【问题标题】:SSL issue with cURL after moving to a new server移动到新服务器后 cURL 出现 SSL 问题
【发布时间】:2013-06-18 07:55:36
【问题描述】:

我正在使用 cURL 通过CURLOPT_POST 发送一些数据。之前相同的代码运行良好,但在移动到新服务器后,cURL 不再通过https 运行。来自其他站点 (domain.com) 的人向我发送了日志文件,但他们没有收到任何信息。然后我尝试使用curl_error() 出错,我遇到了 SSL 问题,但不知道如何解决。

代码:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,'https://track.domain.com/api.php'); 
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param); 
curl_exec($ch);
$error = curl_error($ch); 
curl_close($ch);

错误是:

SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我在 Google 上搜索过,但无法理解问题所在。

我的域需要 SSL 证书吗?我不确定旧服务器中是否有 SSL。从代码中可以看出,我不需要return。那么,在这种情况下,我也应该有 SSL 吗?

我需要domain.com 的证书吗?

我是否需要联系托管公司以重新编译支持 SSL 的 cURL?

有什么想法吗?


注意:我不想通过将CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST 设置为false 来解决问题。


curl_version():

Array
(
    [version_number] => 464896
    [age] => 3
    [features] => 34333
    [ssl_version_number] => 0
    [version] => 7.24.0
    [host] => i686-pc-linux-gnu
    [ssl_version] => OpenSSL/0.9.8b
    [libz_version] => 1.2.3
    [protocols] => Array
        (
            [0] => dict
            [1] => file
            [2] => ftp
            [3] => ftps
            [4] => gopher
            [5] => http
            [6] => https
            [7] => imap
            [8] => imaps
            [9] => pop3
            [10] => pop3s
            [11] => rtsp
            [12] => smtp
            [13] => smtps
            [14] => telnet
            [15] => tftp
        )

)

【问题讨论】:

    标签: php security curl ssl https


    【解决方案1】:

    下载了Mozilla的bundle文件,命名为mozilla.pem

    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true); 
    curl_setopt($ch,CURLOPT_CAINFO,'mozilla.pem'); 
    

    问题是您的 CA(证书颁发机构)列表没有远程站点证书的颁发者。如果您尝试连接到具有自签名证书的服务器,此方法将无法解决。

    【讨论】:

    • 我应该自己做还是联系托管公司更好?
    • 你可以自己做,这是用户可配置的空间。
    • 我的网站根本没有 SSL。另一个网站有。我正在发送“发送并忘记”之类的数据,即不需要一些回报。这种情况下双方都需要SLL吗?
    • 服务器请求时需要客户端证书,所以我猜因为这在以前的托管公司有效,你只是错过了我给你从哪里下载的 CA 文件。
    • 嗯,它正在处理这个文件。但这有点令人困惑。我从未在 ftp 中看到过.pem 文件。而且我必须在每个奇怪的 cURL 请求上调用这个文件。我是否应该联系主机默认以某种方式添加此捆绑包?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 2010-10-07
    • 2014-11-27
    • 2017-11-03
    • 1970-01-01
    相关资源
    最近更新 更多