WordPress: cURL错误60:SSL证书

11

我目前正在debian服务器上建立一个Wordpress安装。我已经安装了PHP7、curl和Apache2。

当我尝试安装新扩展时,出现以下错误消息:

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

我尝试使用以下内容修改php.ini,阅读了一些类似问题的帖子:
curl.cainfo = /etc/php7.0/cacert.pem

但是即使重启了Apache,我仍然面临着这个问题。有什么想法吗?谢谢。

请检查文件路径/etc/php7.0/cacert.pem的位置。 - Pankaj Makwana
我检查了文件路径,一切正常 :/ - Nathan30
10个回答

18

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

您可以通过将此行添加到文件中来实现

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

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

add_filter('https_ssl_verify', '__return_false');

只在测试网站上添加此内容,永远不要在实际运行的网站上添加。


14

将'sslverify'设置为false可以解决WordPress wp_remote_get请求中的cURL错误60: SSL证书问题。

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

5
这个要加在哪里? - Manik Arora
非常好的解决方案!它解决了我的问题!太棒了! - David

6

1
你提供的Github链接中的CA捆绑包对我无效(已重新启动本地Apache等)。只有将设置“sslverify” => FALSE才能正常工作。 - Styledev

4
根据我的最近经验,我认为消息“证书链中的自签名证书”准确地告诉您问题所在 - SSL网站您正在尝试访问的任何证书都不在被引用的证书组中。这很有道理,因为错误报告显示它是自签名证书…即它永远不会包含在下载的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实例\wp-includes\certificates上升级或安装插件时,它会专门引用这些证书。我的临时解决方案是将上述文本文件(包含本地自签名证书链)追加到该位置中的ca-bundle.crt文件中。
一个注意事项 - 当您升级WordPress时,它会覆盖ca-bundle.crt文件,因此您必须重新添加它们 - 除非有更好的解决方案..?

这正是对我起作用的方法。我知道问题在于它是自签名的,我只是不知道如何让WordPress相信这是可以的。你的解决方案是唯一有效的。对于任何在本地安装WordPress时遇到此问题的人来说,这就是解决方案。 - Olandir
被低估的答案,这个解决了我的问题,谢谢。 - Muhammad Nasir Aziz

2

如果有人在本地机器上安装WordPress时遇到同样的问题,通过添加http_request_args过滤器就可以解决问题。

<?php
/**
 * Plugin Name: Local Dev CaFile
 * Plugin URI: https://dev59.com/E6Lia4cB1Zd3GeqPnbeg
 * 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中。

希望对您有所帮助。 祝好


1

@Nathan30 WordPress 版本? - Ganesh
最新的WordPress 4.8 - Nathan30
@Nathan30 只需下载 WordPress 的 4.7.5 版本并将 /wp-includes/certificates/ca-bundle.crt 复制到您的服务器即可。也要备份您的旧文件。 - Ganesh
做了,但问题仍然存在 :/ - Nathan30
我应该把它放在哪里?放在哪个WordPress文件中? - Nathan30
@Nathan30 没有线索啊,兄弟。也许尝试重新安装WordPress。如果你找到任何解决方案,请也更新我一下。谢谢。 - Ganesh

1

1

这里提供的答案都对我没用(也许对于在其服务器上使用Let's Encrypt证书的人也不适用)。我发现最近(2021年9月30日)Let's Encrypt证书到期了DST Root CA X3。除了curl错误60之外,我还遇到了Rest API错误和无法更新WordPress插件的问题。在WordPress安装中可以进行更新:

如果没有更早的话,该补丁应该在此处提供,并将在WordPress 5.9(2021年12月)中提供: https://core.trac.wordpress.org/changeset/51883/trunk/src/wp-includes/certificates/ca-bundle.crt


0

对于WordPress,您可以像这样使用:

$url = "YOUR_ENDPOINT";
$args = array(
        'headers' => array(
            'Authorization' => 'HASH_HERE'
        ),
        'sslverify' => FALSE,
        'data' => array(
            'campaign_id' => $campaign_id
        )
    );

$response = wp_remote_get($url, $args);
$body     = wp_remote_retrieve_body($response);

0
最近我遇到了这个问题,因为我们的网络使用了ssl代理技巧。 我们有一个自定义的CA捆绑包,其中包括我们的内部证书。 它被捆绑在/etc/pki文件夹中,所以我只需创建符号链接: ln -s /etc/pki/tls/certs/ca-bundle.crt /wp-includes/certificates/ 现在每当我更新系统时,它就会保持更新。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接