当似乎不在 PHPMailer、TLS、Openssl、file_get_contents 中时,LetsEncrypt 证书无效/过期,2021 年 9 月 30 日

Posted

技术标签:

【中文标题】当似乎不在 PHPMailer、TLS、Openssl、file_get_contents 中时,LetsEncrypt 证书无效/过期,2021 年 9 月 30 日【英文标题】:LetsEncrypt Certificate invalid/expired when seemingly not in PHPMailer, TLS, Openssl, file_get_contents, Sep 30 2021 【发布时间】:2021-11-23 12:50:45 【问题描述】:

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

将 ssl 标志更改为 not verify_peer 和 not 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 或与之相关的其他问题无关,除了原因和修复相似。

【问题讨论】:

【参考方案1】:

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

来自 openssl 博客... 在颁发新证书时向 Let's Encrypt ACME 客户端提供的当前推荐证书链包含一个中间证书(ISRG Root X1),该证书由旧的 DST Root 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 的具体步骤来自这篇文章... 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

【讨论】:

对于 Centos 7:“截至 24/9/21,升级 ca-certificates 包 (2021.2.50–72) 应该可以解决问题。版本 2021.2.50–72 删除了 DST Root CA X3." - 可以跳过手动步骤,只需升级 ca-certificates 包即可。 @hakre 我也刚刚注意到使用证书的 Goacces wss 套接字在 Safari 上仍然出错,但在 Firefox 上没有。这可能是什么问题? 请我在 Apache 上遇到同样的问题,在 digitalocean 上的 Ubuntu 18.0。有什么补救措施吗? 我关注了@hakre 的回答,它对我有用!你是英雄!【参考方案2】:

只需编辑 fullchain.pem 文件并删除最后一个证书。 - 如果使用与接受的答案不同的操作系统

【讨论】:

以上是关于当似乎不在 PHPMailer、TLS、Openssl、file_get_contents 中时,LetsEncrypt 证书无效/过期,2021 年 9 月 30 日的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHPMailer 发送邮件出现诡异bug,间歇性发送失败

将SMTP凭据传递给PHPMailer配置,而不在heroku中公开它

带有 yandex 邮件的 phpmailer 类

tls 和 ssl 哪个更好?

当 pydoc 似乎不在 PATH 上时,如何运行它?

PHPMailer 电子邮件发送成功但未收到 (EC2)