关于 Let's Encrypt 更换根证书导致部分设备提示证书过期的说明

在 9 月 30 日,Let's Encrypt 所使用的来自 DST Root CA X3 的根证书按计划过期,根据官方的说明,这次事件对于绝大部分用户来说是没有影响的,但我们接到一小部分用户反馈相关的问题。

10月 11 日更新

我们在 10 月 11 日继续将华东节点的云引擎自定义域名、文件自定义域名和美国节点的云引擎自定义域名回滚为了发送 已过期的 DST Root CA X3 证书。

现在我们已经在所有节点的自定义域名上将 DST Root CA X3 证书加回,Android 7.1.1 以下设备将不会再报错,但使用较旧版本 OpenSSL 的程序(如较旧版本的 Node.js、Java 服务器端程序)会提示证书过期,这种情况 建议将 Node.js、Java 升级到最新的稳定版本,在云引擎中可以在 package.jsonsystem.properties 等文件中配置版本。或者可以考虑自行在其他证书供应商处购买证书,在控制台将自定义域名的证书从自动改为自己上传的证书。

回滚 DST Root CA X3 证书

因为 10 月 7 日至 9 日我们在服务器端去掉已过期的 DST Root CA X3 证书导致较多的低于 Android 7.1.1 的设备报错,我们在 10 月 9 日晚间决定回滚这个改动。

现在我们已经在所有节点的 API 自定义域名上将 DST Root CA X3 证书加回,Android 7.1.1 以下设备将不会再报错,但使用较旧版本 OpenSSL 的程序(如较旧版本的 Node.js、Java 服务器端程序)会提示证书过期,这种情况 建议将 Node.js、Java 升级到最新的稳定版本,在云引擎中可以在 package.jsonsystem.properties 等文件中配置版本。或者可以考虑自行在其他证书供应商处购买证书,在控制台将自定义域名的证书从自动改为自己上传的证书。

Android 7.1.1 以下设备无法识别证书

我们在 10 月 7 日至 9 日去除已经过期的 DST Root CA X3 证书的改动会导致 Android 7.1.1 以下设备报错 trust anchor for certification path not found,我们目前还在评估这一改动的影响范围

如果 Android 7.1.1 以下设备对你的应用来说非常重要,可以考虑自行在其他证书供应商处购买证书,在控制台将自定义域名的证书从自动改为自己上传的证书

10 月 9 日更新

在 10 月 9 日(华东节点是 10 月 8 日)我们在服务器端对所有 API 自定义域名进行了调整,现在服务器端不会再发送已经过期的 DST Root CA X3 证书。云引擎和文件服务的自定义域名会在接下来几天内陆续完成同样的调整。非自定义域名(即由 LeanCloud 提供的域名)之前已经在 10 月 7 日至 8 日时去掉了 DST Root CA X3 证书

因此对于使用较旧版本 Openssl、不支持服务端发送的证书中包含多个路径的程序现在应该不会再报证书错误了

服务器程序提示证书过期

如果你在自己的服务器上运行后端程序,访问 LeanCloud 的 API,遇到证书过期(unable to find valid certification pathcertificate has expired 等)的错误提示,首先请 确保你的服务器操作系统信任了 ISRG Root X1 的根证书。可以在 Let's Encrypt 的文档 中看到默认信任该证书的操作系统版本,如果你的操作系统在这个列表中请确保有及时安装系统更新,如果不在的话需要 手动导入 ISRG Root X1 根证书

此外,一些仍在使用 较旧版本 OpenSSL 的程序(如较旧版本的 Node.js、Java)不支持服务端发送的证书中包含多个路径,而是总是选择其中已经过期的路径(DST Root CA X3),因此会提示证书过期。这种情况 建议将 Node.js、Java 升级到最新的稳定版本,在云引擎中可以在 package.jsonsystem.properties 等文件中配置版本。

请检查你的客户端程序是否受到 Let's Encrypt 更换根证书的影响

在 9 月 30 日,Let's Encrypt 所使用的来自 DST Root CA X3 的根证书按计划过期,根据官方的说明,这次事件对于绝大部分用户来说是没有影响的,更换根证书后新的兼容设备列表见 Let's Encrypt 官方 Certificate Compatibility 文档的 Platforms that trust ISRG Root X1 小节

Let's Encrypt 默认在生成的证书包中包含了已经过期的 DST Root CA X3 证书,来继续兼容 Android 2.3.6 至 7.1.1 的设备,但这个已经过期的证书会 影响到使用 OpenSSL 1.0.2 的程序,我们目前 LeanCloud 各服务对于已过期的 DST Root CA X3 证书配置情况如下:

  • 华东节点 API 域名(*.leancloud.cn*.lncldapi.com):未使用 Let's Encrypt
  • 华东节点 API 自定义域名、云引擎自定义域名、文件自定义域名:发送 DST Root CA X3
  • 华东节点 API 共享域名(lc-cn-e1-shared.com)、云引擎共享域名(*.cn-e1.leanapp.cn):不发送 DST Root CA X3
  • 华北节点 API 域名(*.leancloud.cn*.lncld.net):未使用 Let's Encrypt
  • 华北节点 API 自定义域名、云引擎自定义域名、文件自定义域名:发送 DST Root CA X3
  • 华北节点 API 共享域名(avosapps.comlc-cn-n1-shared.com):不发送 DST Root CA X3
  • 美国节点 API 域名(*.leancloud.cn):未使用 Let's Encrypt
  • 美国节点 API 域名(*.lncldglobal.com):不发送 DST Root CA X3
  • 美国节点 API 自定义域名、云引擎自定义域名:发送 DST Root CA X3
  • TDS API 域名、云引擎共享域名:未使用 Let's Encrypt
  • TDS API 自定义域名、云引擎自定义域名、文件自定义域名:发送 DST Root CA X3

根据我们这些天收到的反馈,如果你的客户端程序有如下情况则需要采取措施来恢复正常使用:

  • 使用较旧版本的操作系统(如 Ubuntu 14.04 或 Debian 7 等)或操作系统未及时安装更新的情况下运行程序(通常是服务器端程序)通过 HTTPS 访问 LeanCloud 服务
  • 使用使用了 1.0.2 及以下版本 OpenSSL 的程序(通常是 Runtime 版本较低的服务器程序,包括云引擎,如 Node.js 8、Java 8、.Net core 2.2 及以下版本等)通过 HTTPS 协议访问 LeanCloud 的服务,且 LeanCloud 发送了 DST Root CA X3
  • 使用 Android 2.3.6 至 7.1.1 以下版本通过 HTTPS 访问 LeanCloud 的服务,且 LeanCloud 未发送 DST Root CA X3

对于受控的服务器端应用,如果操作系统中没有内置新的 ISRG Root X1 根证书,那么需要 升级操作系统、安装系统更新或手动导入 ISRG Root X1 根证书。如果使用了使用了 1.0.2 及以下版本 OpenSSL 的程序,则需要升级其 Runtime 所使用的 OpenSSL 到 1.1 版本。通常是建议 直接把 Runtime(这里指 Node.js、Java 或 .Net 等)升级到最新版本(有可能有不兼容,还请查看具体 Runtime 的更新日志)。对于云引擎来说可以在 package.jsonsystem.properties 中配置 Runtime 的版本。

如果你是通过自定义域名访问 LeanCloud 的服务,你可以 自行在其他证书供应商处购买兼容你的客户端设备的证书,在控制台将自定义域名的证书从自动改为自己上传的证书

对于无法升级的客户端(如使用 Android 7.1.1 及以下版本访问未发送 DST Root CA X3 的服务),如果希望支持这些客户端、且访问的是自定义域名的话,也是建议 自行在其他证书供应商处购买证书,并在控制台上传

本主题在创建 3 天后自动关闭。不再允许添加新回复。

本主题已被解除置顶,它将不再显示在它所属分类的顶部。