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

mkcert生成的SSL证书非完整链导致Node请求报错如何修复

问题根因

Node.js 默认不读取系统根证书存储的信任列表,而mkcert生成的站点证书默认仅包含单张域名证书,未携带完整证书链,因此Node.js发起TLS请求时无法完成证书信任链校验,而浏览器会使用系统证书存储所以访问正常。

可行修复方案

方案1:Node 20+ 启用系统根证书信任

Node 20及以上版本提供了--use-system-ca启动参数(Node 22起已转为稳定特性),开启后Node会直接信任系统证书存储中的根CA,你已经通过mkcert -install将mkcert根CA安装到系统,因此直接用该参数启动脚本即可:

node --use-system-ca your-script.js

该方案无需修改任何业务代码,也不需要全局配置环境变量。

方案2:请求时单独指定信任CA

在发起请求的代码中,手动传入mkcert根CA创建HTTPS Agent,仅针对当前请求生效,作用范围可控,兼容性更好:

import fs from 'node:fs'
import https from 'node:https'

// 读取mkcert根CA证书,可通过`mkcert -CAROOT`命令获取根证书所在目录
const ca = fs.readFileSync('/path/to/mkcert/rootCA.pem')
const customAgent = new https.Agent({ ca })

// fetch请求传入自定义Agent
fetch('https://localhost:52882/', {
  agent: customAgent
})

如果使用axios等其他请求库,同理配置对应httpsAgent参数即可。

方案3:服务端配置完整证书链

如果你可以修改本地HTTPS服务的配置,可将mkcert根CA和站点证书合并为完整链证书,服务端握手时会主动返回完整信任链:

  • 执行命令合并证书:
cat localhost.pem "$(mkcert -CAROOT)/rootCA.pem" > localhost-fullchain.pem
  • 修改服务端HTTPS配置,证书文件替换为新生成的localhost-fullchain.pem,私钥仍使用原有的localhost-key.pem即可。
    该方案适配所有客户端,无需修改请求侧代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 03:36:09