如何修复Debian 8 Docker内与Let's Encrypt DST根证书相关的CERT_HAS_EXPIRED错误
失效原因
Debian 8(Jessie)已于2020年停止长期支持,内置CA证书库长期未更新,缺失Let's Encrypt当前使用的ISRG Root X1根证书。同时Node v8.x默认使用内置的根证书列表,不会读取系统层面的CA证书配置,因此仅修改系统CA配置对Node发起的HTTPS请求无效。
临时修复方案(无需更换基础镜像)
按如下顺序修改Dockerfile:
- 替换Debian Jessie的apt源为归档源,确保可以正常安装依赖:
RUN sed -i 's/deb.debian.org/archive.debian.org/g' /etc/apt/sources.list \ && sed -i 's/security.debian.org/archive.debian.org/g' /etc/apt/sources.list \ && apt-get update \ && apt-get install -y ca-certificates curl
- 下载ISRG Root X1根证书并更新系统CA库:
# 注释过期的DST_ROOT_CA_X3证书(原有操作保留) RUN sed -i 's#mozilla\/DST_Root_CA_X3.crt#!mozilla\/DST_Root_CA_X3.crt#g' /etc/ca-certificates.conf # 下载ISRG Root X1根证书 RUN curl -fsSL https://letsencrypt.org/certs/isrgrootx1.pem -o /usr/local/share/ca-certificates/isrgrootx1.crt # 刷新系统CA证书 RUN update-ca-certificates --fresh
- 配置Node使用系统CA证书,二选一即可:
- 启动应用时添加启动参数:
node --use-openssl-ca 你的应用入口文件路径 - 在Dockerfile中添加全局环境变量:
ENV NODE_OPTIONS="--use-openssl-ca"
如果上述配置依然无效,可以额外添加证书路径环境变量:
ENV NODE_EXTRA_CA_CERTS="/usr/local/share/ca-certificates/isrgrootx1.crt"
长期修复方案
Debian 8、Node v8、Meteor 8均已停止官方维护,存在大量未修复的安全漏洞,证书类问题还会反复出现,建议直接更换基础镜像:
- 优先选择基于Debian 11/12、Ubuntu 20.04+的官方Node LTS版本镜像
- 同步升级Meteor到仍在支持的版本,彻底解决依赖过时问题
内容的提问来源于stack exchange,提问作者paltaa
相关产品推荐
相关产品推荐

