LetsEncrypt 证书 invalid/expired 似乎不在 PHPMailer、TLS、Openssl 中,file_get_contents,2021 年 9 月 30 日

LetsEncrypt Certificate invalid/expired when seemingly not in PHPMailer, TLS, Openssl, file_get_contents, Sep 30 2021

从 2021 年 10 月 1 日起,我遇到了 PHPMailer 突然说我的证书已过期并拒绝使用 TLS 加密正确连接到端口 587 的问题。

将 ssl 标志更改为非 verify_peer 而不是 verify_peer_name 将临时解决电子邮件问题。

$mail->SMTPOptions = array (
    'ssl' => array(
        'verify_peer'  => false,
        'verify_peer_name'  => false,
        'allow_self_signed' => true
        
    ));

但这不是一个理想的解决方案。

如果我通过端口 80 和 web 访问同一台服务器,则证书没有问题。

如果我使用 OpenSSL 命令行连接,它说证书已于 2021 年 9 月 30 日过期。

这个问题也出现在php命令file_get_contents下。

注意:此问题是 PHPMailer 和电子邮件特定的,提供了有关 PHPMailer 的良好信息,不应关闭。它与 docker 或与其相关的其他问题无关,只是原因和修复相似。

这里的问题是嵌入在 LetsEncrypt 链中的真正过期的授权证书,它确实在 2021 年 9 月 30 日过期。

来自 openssl 博客 ... 在颁发新证书时呈现给 Let's Encrypt ACME 客户端的当前推荐证书链包含一个中间证书 (ISRG Root X1),该证书由旧的 DST 根 CA X3 证书签署,该证书将于 2021 年 9 月 30 日到期.在某些情况下,OpenSSL 1.0.2 版本会将 Let's Encrypt CA 颁发的证书视为具有过期的信任链。

在这里阅读更多... https://www.openssl.org/blog/blog/2021/09/13/LetsEncryptRootCertExpire/

主要影响OpenSSL 1.0.2。在我使用 OpenSSL 1.1.1 的 Mac 上,我没有遇到问题。

CentOS,我相信其他人已经提供了这个问题的修复...

备份

cp -i /etc/pki/tls/certs/ca-bundle.crt ~/ca-bundle.crt-backup

将证书添加到黑名单目录

trust dump --filter "pkcs11:id=%c4%a7%b1%a4%7b%2c%71%fa%db%e1%4b%90%75%ff%c4%15%60%85%89%10" | openssl x509 | sudo tee /etc/pki/ca-trust/source/blacklist/DST-Root-CA-X3.pem

更新根存储

sudo update-ca-trust extract

验证删除

diff ~/ca-bundle.crt-backup /etc/pki/tls/certs/ca-bundle.crt

上面CentOS的具体步骤来自这个post ... https://blog.devgenius.io/rhel-centos-7-fix-for-lets-encrypt-change-8af2de587fe4#:~:text=So%2C%20DST%20Root%20CA%20X3%20needs%20to%20be,The%20manual%20steps%20below%20are%20no%20longer%20necessary.

这是一个突然出现的非常疯狂的问题(除非您关注 openSSL 博客)

我花了大约 1 天的时间进行追踪,一直没有发送电子邮件,也没有显示网站的大部分内容。

希望这能为人们指明正确的方向。

更新:正如@hakre 所指出的那样,您可能只需...

yum upgrade ca-certificates

只需编辑 fullchain.pem 文件并删除最后一个证书。 - 如果使用 OS 不同于已接受的答案