WORDPRESS : cURL error 60: SSL certificate

时间:2017-06-19 13:58:47

标签: php wordpress apache curl

I'm currently building a Wordpress install under a debian server. I install PHP7, curl and Apache2

While I'm trying to install new extension I have this error message :

cURL error 60: SSL certificate problem: self signed certificate in certificate chain

I try to modify the php.ini with this, after reading some post treating similar issue :

curl.cainfo = /etc/php7.0/cacert.pem

But I'm still facing the problem even with restart apache.

Any ideas ?

Thanks in advance

6 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

根据我最近的经验,我认为证书链中的“自签名证书”消息确切地告诉您问题 - 您尝试访问的哪个SSL站点都有证书不在 cacert.pem 引用的束中的链。

这是有道理的,因为错误报告它是自签名证书。即它永远不会包含在下载的cacert.pem文件中。

我的解决方案是获取 Base64 编码文件,其中包含我尝试访问的网站的证书链。

    How to: Use a browser to access the site you are trying to access, click the 
    certificate part of the address (usually to the left of the address box with 
    a lock icon) and the click on whatever your interface supports to see the 
    list of certificates in the chain.  Manually export those certificates to a 
    text file.

然后使用文本编辑器将此文本文件附加到PHP用于CURL操作的证书列表(cacert.pem)。

你提到WordPress .. WordPress v4.9.6有一套证书,它在升级或安装插件时专门引用./WordPress Instance \ wp-包括\证书。我的临时解决方案是将上面的文本文件(包含本地自签名证书链)附加到您将在该位置找到的 ca-bundle.crt 文件中。

一个警告 - 当您升级WordPress时,它将覆盖 ca-bundle.crt 文件,因此您必须重新添加它们 - 除非有人有更好的解决方案..?

答案 2 :(得分:0)

将'sslverify'设置为false可修复cURL错误60:WordPress wp_remote_get请求中的SSL证书。

wp_remote_get($url, array('sslverify' => FALSE));

答案 3 :(得分:0)

WordPress使用它自己的CA捆绑包,位于WP/wp-includes/certificates中。

直到本期讨论的https://core.trac.wordpress.org/ticket/45807为止,WordPress附带的CA软件包已经过时了。

不建议将sslverify设置为false,而是可以下载捆绑软件的更新版本https://github.com/WordPress/WordPress/tree/master/wp-includes/certificates并将其替换在wordpress文件夹中。

答案 4 :(得分:0)

万一有人在本地计算机上安装WordPress遇到相同的问题,可以通过添加http_request_args过滤器为我解决问题

<?php
/**
 * Plugin Name: Local Dev CaFile
 * Plugin URI: https://stackoverflow.com/q/44632619/881743
 * Description: Another solution for `SSL certificate problem: self signed certificate in certificate chain apache` error for your local development
 * Version: 1.0
 * Author: John Doe
 * Author URI: https://stackoverflow.com/
 * License: WTFPL
 */

add_filter( 'http_request_args', function ( $args ) {
    if ( getenv('WP_ENV') !== 'development' ) {
        return $args;
    } 

    $args['sslcertificates'] = ini_get( 'curl.cainfo' ) ?? $args['sslcertificates'];

    return $args;
}, 0, 1 );

将其保存在path/to/wp-content/plugins/dev-plugin.php中,然后从wp-admin激活插件,或者可以选择将其放入WPMU_PLUGIN_DIR

希望有帮助 干杯

答案 5 :(得分:0)

在您的测试站点中禁用 SSL 验证。

您可以通过将此行添加到文件中来做到这一点

外观 > 主题编辑器 > functions.php 或

/wp-content/themes/YOUR_THEME/functions.php:

add_filter('https_ssl_verify', '__return_false');

仅在测试站点上添加此内容,切勿在实时站点上添加。