证书过期
故障排除证书过期问题
Let's Encrypt 根证书于 9 月 30 日过期,此更改导致了一些问题。我们在下面解释了可能出现的问题以及如何解决这些问题。
这不是 Meteor 或 Galaxy 的问题,而是如果您使用 Let's Encrypt 生成的证书的自然过程。
无法运行 Meteor 命令
Galaxy 和所有 Meteor 服务器都使用 Let's Encrypt,它在 5 月份的这篇文章中宣布了 DST Root CA X3 将于 2021 年 9 月 30 日过期。
旧版本的 Meteor,更具体地说,任何早于 Meteor v1.9 的版本都附带了低于 v10 的 Node.JS 版本,该版本使用了 OpenSSL < 1.0.2。
如果您在运行 Meteor 命令时出现类似“连接错误(证书已过期)”的错误,则表示您正在运行低于 v1.9 的 Meteor 版本。
目前,一种解决方法是使用以下环境变量 NODE_TLS_REJECT_UNAUTHORIZED 运行所有 meteor 命令,例如在部署命令中
NODE_TLS_REJECT_UNAUTHORIZED=0 meteor deploy
另请注意,如果您在本地或任何 CI 管道中运行旧版发行版(例如 Ubuntu 16 及更早版本),也可能会遇到此问题。在这种情况下,我们建议您更新您的发行版或您本地根证书存储库(操作方法因发行版而异)。
这不是 Meteor 或 Galaxy 的问题,而是您访问的资源中 Let's Encrypt 证书的更改。
请求失败
如果您的服务器正在访问目标主机使用 Let's Encrypt 证书的外部资源,并且您的应用程序正在运行旧版本的 Meteor,您也需要将 NODE_TLS_REJECT_UNAUTHORIZED
添加到服务器环境变量中。
如果您使用的是 Galaxy,只需将其添加到您的设置文件中即可
{
"galaxy.meteor.com": {
"env": {
"NODE_TLS_REJECT_UNAUTHORIZED": "0"
}
}
}
请注意:我们不建议继续使用此解决方法,因为任何 SSL 证书都将被授权,并且您会将应用程序暴露于严重的安全性问题。最佳选择是将 Meteor 更新到最新版本,或至少更新到 Meteor 1.9,因为它是第一个使用 Node.js 12 的版本。
您可以在此处查看我们支持的 Meteor 版本列表。如果您的应用程序不在其中,则应尽快迁移。
这不是 Meteor 或 Galaxy 的问题,而是您访问的外部资源中 Let's Encrypt 证书的更改。
客户端兼容性
如前所述,Galaxy 会自动为所有客户端颁发 Let's Encrypt 证书。这造成了混淆,因为如果您依赖于旧版客户端能够访问您的网站,则此操作将无法正常工作。
如果 Let's Encrypt 证书不适合您的客户端,则需要从其他提供商获取其他证书并将自定义证书上传到 Galaxy。
您也可以手动生成 Let's Encrypt 证书并上传到 Galaxy,但在 certbot 上指定一个替代的首选链
sudo certbot certonly --manual --preferred-chain "ISRG Root X1" --preferred-challenges dns
更多信息可在此处获取。
如果您使用的是 Galaxy,则需要按照此处的要求和步骤操作,生成证书后。Galaxy 仅接受 .pem
格式的自定义证书,与 nginx 使用的格式相同。
这不是 Meteor 或 Galaxy 的问题,而是您正在使用的 Let's Encrypt 证书的更改。
已知无法工作的客户端
以下是一些已知无法工作的客户端的简要列表
- Mac OS X 10.12.1 之前的版本。除捆绑根链的 Firefox 外,任何浏览器都无法正常工作。
- v10 之前的 Node.JS HTTP 请求。这包括 1.9 之前的任何 Meteor 版本(除外)。
- 任何使用 OpenSSL 1.0.2 及更早版本的客户端。
请注意,这不是详尽的列表,而是基于我们的报告和经验。
这不是 Meteor 或 Galaxy 的问题,而是您正在使用的 Let's Encrypt 证书的更改。