Node 16环境下npm拒绝信任已配置的自签名CA证书问题
解决Node 16环境下npm自定义CA证书不生效问题
失效原因
Node 16配套的npm v7及以上版本调整了内置的证书校验逻辑,默认不读取NODE_EXTRA_CA_CERTS环境变量,也不会优先加载系统信任的CA证书,因此Node 12中可用的配置方案在新版本中无法生效。
可行解决方案
以下方案均不会关闭全局证书校验,仅让npm信任指定的自定义CA证书:
方案1:npm单独配置信任自定义CA证书(最稳妥,适配所有场景)
该配置仅作用于npm,不会影响其他Node.js应用:
- 全局生效:执行命令
npm config set cafile /path/to/my-ca-cert.crt - 仅当前项目生效:在项目根目录的
.npmrc文件中添加一行cafile=/path/to/my-ca-cert.crt
如果你有多个需要信任的自定义CA,将所有证书的PEM格式内容拼接存入同一个.crt文件,再配置到cafile参数即可。
- 全局生效:执行命令
方案2:配置npm使用系统CA信任栈
你已经将自定义CA添加到系统信任列表,可直接配置npm调用系统CA库完成校验:
执行命令npm config set use-openssl-ca true
配置完成后npm会复用系统已信任的所有CA证书,无需单独导入自定义CA。方案3:单次命令临时生效
如果不需要永久修改配置,可在执行
npm install时携带参数临时生效:- 单独指定CA证书:
npm install --cafile /path/to/my-ca-cert.crt - 临时使用系统CA栈:
npm install --use-openssl-ca
- 单独指定CA证书:
验证配置
配置完成后可执行npm config list查看对应参数是否配置正确,再执行npm install即可解决SELF_SIGNED_CERT_IN_CHAIN报错。
注意:请勿使用
npm config set strict-ssl false配置,该操作会关闭所有HTTPS证书校验,存在安全风险。
内容的提问来源于stack exchange,提问作者rgov
相关产品推荐
相关产品推荐

