[英]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 文件夹中。
下载此文件http://curl.haxx.se/ca/cacert.pem
使用您的文件在openssl.cafile=c:/cacert.pem
的位置
如果有人在本地机器上安装 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.