由于 Let's Encrypt DST Root CA X3 根证书过期,用户代理不信任 Web 服务器

由于 Let's Encrypt DST Root CA X3 根证书过期,用户代理不信任 Web 服务器

我使用 Let's Encrypt 颁发的 SSL 证书来处理 NodeJS 服务器。它在某些客户端上运行良好(我的 macOS 上的 Safari 和 Firefox),但在其他客户端上不运行(curl在我的 macOS 上,iOS 上的 Safari)。iOS 上的通知是:

Not trusted

Expired 30/09/21 07:01:15

通知内容curl如下:

curl: (60) SSL certificate problem: certificate has expired
More details here: https://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alternate file using the --cacert option.

检查证书显示日期有效。我发现此警告来自 Let's Encrypt:

DST Root CA X3 根证书已于 2021 年 9 月 30 日 14:01:15 GMT 到期。

...

如果您的网站在大多数设备上运行正常,但在某些设备上运行不正常,则问题就出在他们的信任库(受信任的根证书列表)上。

...

macOS、iOS 等

即使您的服务器不再使用过期的 R3 > DST Root CA X3 链,某些操作系统也会保留该链。请尝试重新启动受影响的客户端设备。

我强制更新了证书,将私钥和完整链复制到 NodeJS 位置,然后重启了服务器。我重启了 iOS 设备。新日期显示在我的浏览器和 iOS 设备上。但 iOS 设备仍然不信任该网站。

该网站是www.emotionathletes.og

如何确保所有客户端都获得正确的证书链并可以访问网站?

答案1

由于您无法控制您的客户端,因此最安全的方法是开始使用其他 CA 颁发的证书。

一个可能的 CA 是 ZeroSSL (https://zerossl.com)。他们还通过 ACME 协议免费提供证书,就像 Let's Encrypt 一样(https://zerossl.com/letsencrypt-alternative/)并且与旧设备具有相当好的兼容性(https://help.zerossl.com/hc/en-us/articles/360058294074-ZeroSSL-Compatibility-List)。

如果您已经在使用 certbot 命令行工具来管理您的 Let's Encrypt 证书,那么您可以向其中添加一些额外的开关来开始颁发 ZeroSSL 证书:

$ certbot ... --server https://acme.zerossl.com/v2/DV90 --eab-kid XXX --eab-hmac-key YYY

您可以在注册自己的账户后从 ZeroSSL 网站获取--eab-kid和值。--eab-hmac-key

相关内容