CURL 错误:[77] 错误设置证书验证位置:使用 LetsEncrypt 证书

时间:2021-05-06 18:48:34

标签: php ssl curl apache2

我知道这个问题已经在多个线程和许多情况下被问过。我已经搜索这些线程好几天了。我仍然不知所措。我希望这里有人能带来一些新的启示。

我认为问题是:我需要做什么才能让 PHP CURL 使用颁发给网站的证书。在这种情况下,LetsEncrypt 证书是使用 CERTBOT 颁发的。根据我测试过的浏览器,证书是有效的。

我的域名是:app.ccgopvt.org

我运行了这个 PHP 程序...


    $sslCertPath = "/etc/letsencrypt/live/app.ccgopvt.org/fullchain.pem";
    $ch = curl_init( $url );
    // Assign CAINFO to the specific SSL Cert ONLY IF it is self-authorized.
    curl_setopt( $ch, CURLOPT_CAINFO, $sslCertPath);
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt( $ch, CURLOPT_HEADER, 1);
    curl_setopt( $ch, CURLOPT_CERTINFO, 1);
    curl_setopt( $ch, CURLOPT_VERBOSE, 1);
    
    $response = curl_exec($ch);
    if ( ! ($response)) {
        $errno = curl_errno($ch);
        $errstr = curl_error($ch);
        $response = "postToURL - CURL error: [$errno] $errstr.";
    }
    curl_close($ch);
    It produced this output:
    postToURL - CURL error: [77] error setting certificate verify locations: CAfile: /etc/letsencrypt/live/app.ccgopvt.org/fullchain.pem CApath: /etc/ssl/certs.

我的网络服务器是(包括版本): 服务器版本:Apache/2.4.25 (Debian) 服务器构建时间:2019-10-13T15:43:54

我的网络服务器运行的操作系统是(包括版本): Debian GNU/Linux 9 \n \l

我的托管服务提供商(如果适用)是:我自己

我可以在我的机器上登录到 root shell(是或否,或者我不知道):是

我正在使用控制面板来管理我的网站(否,或提供控制面板的名称和版本):否

我的客户端版本是(例如,certbot --versioncertbot-auto --version 的输出,如果您使用的是 Certbot): 证书机器人 0.28.0

我可以直接从命令行为相同的 URL 运行 curl 并且我得到一个有效的响应。例如...


    # curl https://app.ccgopvt.org
    
    
      
</head>
<body>
<h1>You have reached the CCGOPVT Admin Pages</h1>
...

此行为特定于我的 Web 应用程序。一切正常,但突然之间就不行了。 (是的,当然有些东西改变了。我只是不知所措!) 上面 $sslCertPath 的初始设置是 NULL。 (这是我在其他服务器上的默认设置。)但这产生了错误。上面尝试分配LetsEncrypt证书路径,但结果是一样的。

我确定我对 CURL 如何使用 SSL 证书的理解缺少一些基本的东西。不知何故,我认为这个问题与两者的相互作用有关。我希望这里有人可以提供帮助。

提前致谢,

罗恩

0 个答案:

没有答案