繁体   English   中英

WORDPRESS:cURL 错误 60:SSL 证书

[英]WORDPRESS : cURL error 60: SSL certificate

我目前正在 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,我仍然面临这个问题。

有任何想法吗?

提前致谢

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

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

根据我最近的经验,我相信“证书链中的自签名证书”消息准确地告诉了您这个问题 - 无论您尝试访问的哪个 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-includes\\certificates 升级或安装插件时专门引用了这些证书。 的权宜之计是将上面的文本文件(包含本地自签名证书链)附加到您将在该位置找到的ca-bundle.crt文件中。

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

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

直到最近,WordPress 随附的 CA 包已经过时,如本期所述: https : //core.trac.wordpress.org/ticket/45807

不建议将sslverify设置为false ,相反,您可以下载包的更新版本https://github.com/WordPress/WordPress/tree/master/wp-includes/certificates并将其替换到 wordpress 文件夹中。

如果有人在本地机器上安装 WordPress 时遇到同样的问题,通过添加http_request_args过滤器对我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

希望能帮助干杯

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

您可以通过将此行添加到文件中来执行此操作

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

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

add_filter('https_ssl_verify', '__return_false');

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

从 wp-cli 2.4 => 2.5 升级对我有帮助。 (安装此https://github.com/wp-cli/profile-command

这里的所有答案都不适用于我(并且可能不适用于在其服务器上使用 Let's Encrypt 证书的人)。 我发现最近(2021 年 9 月 30 日)Let's Encrypt Cretificates 过期了 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。资源管理器

对于 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);

我最近遇到了这个问题,因为我们的网络使用了 ssl 代理技巧。 我们有一个自定义 CA 包,其中包含我们的内部证书。 这是捆绑在 /etc/pki 文件夹中的,所以我只是符号链接到它: ln -s /etc/pki/tls/certs/ca-bundle.crt /wp-includes/certificates/

现在,每当我更新系统时,它都会保持更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM