You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Alpine 3.14上Nodejs应用axios调用HTTPS遇Letsencrypt证书过期报错求助

解决方案

步骤1:更新Alpine系统CA证书并移除过期根证书

你可以直接在运行中的容器执行以下命令,也可以将命令添加到Dockerfile中固化配置:

apk update && apk upgrade -y ca-certificates
sed -i '/DST_Root_CA_X3.crt/d' /etc/ca-certificates.conf
update-ca-certificates

Dockerfile写法示例:

RUN apk update && apk upgrade -y ca-certificates \
    && sed -i '/DST_Root_CA_X3.crt/d' /etc/ca-certificates.conf \
    && update-ca-certificates

步骤2:配置Node.js读取系统CA证书

Node.js默认优先使用自身内置的根证书列表,不会主动读取系统CA存储,这是你修改系统证书后仍然报错的核心原因。
启动Node应用前添加以下环境变量即可修复:

export NODE_OPTIONS=--use-openssl-ca

Dockerfile全局配置写法:

ENV NODE_OPTIONS="--use-openssl-ca"

步骤3:axios专属适配配置(可选,仅前两步不生效时使用)

如果配置完上述内容仍然报错,可以在axios初始化时显式指定读取系统CA证书:

const https = require('https')
const fs = require('fs')
const axios = require('axios').default.create({
    httpsAgent: new https.Agent({
        ca: fs.readFileSync('/etc/ssl/certs/ca-certificates.crt')
    })
})

注意:仅测试场景可以临时添加配置process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'跳过证书校验,生产环境禁止使用该配置。

验证方法

在容器内执行以下命令验证修复结果:
node -e "const https = require('https'); https.get('https://valid-isrgrootx1.letsencrypt.org/', (res) => { console.log('修复成功,状态码:', res.statusCode) }).on('error', (e) => { console.error('报错:', e.message) })"

内容的提问来源于stack exchange,提问作者Sagar Kalburgi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:45:04