如何修复cURL error 60: SSL certificate problem: certificate has expired问题

错误类型:
WP内部错误
错误名称:
SSL证书已过期
英文名称:
cURL error 60: SSL certificate problem: certificate has expired
错误描述:
WP core有一个根证书文件,/wp-includes/certificates/ca-bundle.crt用于检查通过HTTP API创建的所有请求的SSL。在此文件中,用于为您的站点创建证书的根证书之一已过期。因此,请求无法通过验证并生成此错误。

如何修复cURL error 60: SSL certificate problem: certificate has expired问题

从2021年9月30日起,HTTP API请求可能会停止在安装了Let’s Encrypt证书的WordPress网站上工作。此前我们有提醒过大家注意Let’s Encrypt根证书将过期可能会带来问题

例如,这样的请求会导致错误:

$res = wp_remote_get( ‘https://wp-kama.com/’ );
if( is_wp_error( $res ) ){
echo $res->get_error_message();
}
$res = wp_remote_get( ‘https://wp-kama.com/’ );

if( is_wp_error( $res ) ){
echo $res->get_error_message();
}

$res = wp_remote_get( 'https://wp-kama.com/' );

if( is_wp_error( $res ) ){
echo $res->get_error_message();
}

然后你就会遭遇下方的报错提示:

cURL error 60: SSL certificate problem: certificate has expired

这样的错误将随处可见,例如:

  • 在WP管理面板检查WordPress更新时。
  • 检查插件更新时。
  • 访问任何服务的api时。例如,TinyPNG图像压缩以及其他一些使用任何类型请求的插件。

为什么我们看到错误证书已过期?

简而言之,WP core有一个根证书文件,/wp-includes/certificates/ca-bundle.crt用于检查通过HTTP API创建的所有请求的SSL。在此文件中,用于为您的站点创建证书的根证书之一已过期。因此,请求无法通过验证并生成此错误。

更详细的解释:

在不详细介绍的情况下,对于非专业人士来说几句关于为什么到期 DST Root CA X3证书将影响Let’s Encrypt颁发的证书。每个验证证书的系统都有自己的可信根证书存储库。系统将信任在验证期间使用这些根证书之一的私钥签名的证书。根证书本身通常有很长的到期日期,很少更改并且在生成最终主题证书(在这种情况下是域名证书)时不使用,相反,公钥基础设施意味着使用信任链 – 根证书用于签署中间证书和已经使用它们来签署最终主题证书(域证书)。此外,为了让系统信任最终主题证书,它必须能够跟踪从该证书到它信任的根证书之一的完整链。

当Let’s Encrypt出现时,它的ISRG Root X1根证书(就像任何新的根证书一样)无法快速进入大量系统的受信任证书库。同时,为了项目的成功运行,从一开始就颁发的证书必须受到最大数量的“开箱即用”系统的信任(这些系统的用户没有任何额外的操作)。在这方面,对于证书,Let’s Encrypt开始使用通向根证书的信任链DST Root CA X3,这是大多数系统认可的。

随着下一次WP更新,此错误将会自行消失,但如果您今天需要解决方案,或者您不打算更新WordPress,但需要有效的HTTP请求,请执行以下操作。

cURL error 60: SSL certificate has expired解决办法

您需要更新/wp-includes/certificates/ca-bundle.crt文件的内容,将其更改为https://curl.se/ca/cacert.pem文件的内容。

在这种情况下更改核心文件是可以接受的,因为下次更新WP时,问题就会消失。你可以在GitHub上查看相应的提交

手动替换内容更新以解决问题

  1. 下载此文件https://curl.se/ca/cacert.pem
  2. 使用上述下载以更新/wp-includes/certificates/ca-bundle.crt的内容。
  3. Done!报错将会销声匿迹。

或添加代码片段以修复报错

当您能够从管理面板运行代码时,使用代码会很方便,例如使用代码片段插件。

  1. 将以下代码添加到 themes functions.php 文件中(或在 Code Snippets 插件中):
    /**
    * Goto http://yoursite.com/?update-wp-ca-bundle
    */
    if( isset( $_GET[‘update-wp-ca-bundle’] ) ){
    $crt_file = ABSPATH . WPINC . ‘/certificates/ca-bundle.crt’;
    $new_crt_url = ‘http://curl.haxx.se/ca/cacert.pem’;
    if( is_writable( $crt_file ) ){
    $new_str = file_get_contents( $new_crt_url );
    if( $new_str && strpos( $new_str, ‘Bundle of CA Root Certificates’ ) ){
    $up = file_put_contents( $crt_file, $new_str );
    echo $up ? ‘OK: ca-bundle.crt updated’ : ‘ERROR: can`t put data to ca-bundle.crt’;
    }
    else {
    echo ‘ERROR: can’t download curl.haxx.se/ca/cacert.pem’;
    }
    }
    else {
    echo ‘ERROR: ca-bundle.crt not writable’;
    }
    exit;
    }
    /**
    * Goto http://yoursite.com/?update-wp-ca-bundle
    */
    if( isset( $_GET[‘update-wp-ca-bundle’] ) ){

    $crt_file = ABSPATH . WPINC . ‘/certificates/ca-bundle.crt’;
    $new_crt_url = ‘http://curl.haxx.se/ca/cacert.pem’;

    if( is_writable( $crt_file ) ){
    $new_str = file_get_contents( $new_crt_url );

    if( $new_str && strpos( $new_str, ‘Bundle of CA Root Certificates’ ) ){
    $up = file_put_contents( $crt_file, $new_str );

    echo $up ? ‘OK: ca-bundle.crt updated’ : ‘ERROR: can`t put data to ca-bundle.crt’;
    }
    else {
    echo ‘ERROR: can’t download curl.haxx.se/ca/cacert.pem’;
    }
    }
    else {
    echo ‘ERROR: ca-bundle.crt not writable’;
    }

    exit;
    }

    /**
     * Goto http://yoursite.com/?update-wp-ca-bundle
     */
    if( isset( $_GET['update-wp-ca-bundle'] ) ){
    
    $crt_file = ABSPATH . WPINC . '/certificates/ca-bundle.crt';
    $new_crt_url = 'http://curl.haxx.se/ca/cacert.pem';
    
    if( is_writable( $crt_file ) ){
    $new_str = file_get_contents( $new_crt_url );
    
    if( $new_str && strpos( $new_str, 'Bundle of CA Root Certificates' ) ){
    $up = file_put_contents( $crt_file, $new_str );
    
    echo $up ? 'OK: ca-bundle.crt updated' : 'ERROR: can`t put data to ca-bundle.crt';
    }
    else {
    echo 'ERROR: can't download curl.haxx.se/ca/cacert.pem';
    }
    }
    else {
    echo 'ERROR: ca-bundle.crt not writable';
    }
    
    exit;
    }

    使用后,删除此代码。

  2. 访问http://YOURSITE.com/?update-wp-ca-bundle页面。(替换YOURSITE.com到您的域名…)
  3. Done!一切都应该像以前一样工作。
重要声明

本网站的文章部分内容可能来源于网络,如有侵犯你的权益请联系邮箱:wxzn8@outlook.com
站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!请在下载24小时内删除!本站资源大多存储在云盘,如发现链接失效请反馈,我们会及时更新。

给TA打赏
共{{data.count}}人
人已打赏
WordPress错误学习

如何修复“从无Cookie域提供静态内容”警告

2023-1-5 23:30:47

WordPress错误学习

如何解决WordPress提示“您的网站上存在严重错误”

2023-1-5 23:31:04

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索