跳至内容

证书过期

故障排除证书过期问题

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 命令,例如在部署命令中

bash
NODE_TLS_REJECT_UNAUTHORIZED=0 meteor deploy

另请注意,如果您在本地或任何 CI 管道中运行旧版发行版(例如 Ubuntu 16 及更早版本),也可能会遇到此问题。在这种情况下,我们建议您更新您的发行版或您本地根证书存储库(操作方法因发行版而异)。

这不是 Meteor 或 Galaxy 的问题,而是您访问的资源中 Let's Encrypt 证书的更改。

请求失败

如果您的服务器正在访问目标主机使用 Let's Encrypt 证书的外部资源,并且您的应用程序正在运行旧版本的 Meteor,您也需要将 NODE_TLS_REJECT_UNAUTHORIZED 添加到服务器环境变量中。

如果您使用的是 Galaxy,只需将其添加到您的设置文件中即可

json
{
  "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 证书的更改。