Node.js使用axios调用自签名证书Flask服务报DEPTH_ZERO_SELF_SIGNED_CERT如何解决
问题排查及解决方案
1. 优先验证证书签发关系
你现在收到的DEPTH_ZERO_SELF_SIGNED_CERT错误本质是Node.js判定服务端返回的localhost证书为自签名证书,而非你自建CA签发的证书,所以优先验证证书签发链路是否正确:
执行openssl命令校验证书:
openssl verify -CAfile myCA.pem localhost.crt
如果返回结果不是localhost.crt: OK,说明你生成localhost.crt时操作错误,直接生成了自签名证书而非用myCA签发的证书,需要重新走CA签发证书的流程。
2. 修正CA文件读取逻辑
fs.readFileSync默认返回Buffer对象,部分Node.js版本对Buffer类型的CA参数解析存在兼容问题,修改为读取为UTF-8字符串即可:
var agent = new https.Agent({ ca: fs.readFileSync(path.join(__dirname, './myCA.pem'), 'utf8') });
全局Agent配置也同步修改为上述写法。
3. 确认CA证书格式有效性
检查myCA.pem为标准PEM格式的文本文件,文件开头为-----BEGIN CERTIFICATE-----,结尾为-----END CERTIFICATE-----,如果是二进制DER格式的CA证书,需要用openssl转换为PEM格式后再使用。
4. 关于CA证书包的说明
你当前只有单个根CA证书,不需要额外生成证书包。如果后续需要使用多CA证书包,只需要将多个PEM格式的CA证书按顺序拼接写入同一个.pem文件即可,不需要额外处理。
其他可选排查点
- 确认axios版本为1.x及以上,旧版本axios存在httpsAgent参数传递异常的已知问题
- 检查是否存在全局axios配置覆盖了当前请求的httpsAgent参数
- 检查localhost证书的SAN(使用者可选名称)配置包含你访问的域名(localhost)或IP(127.0.0.1),避免额外的域名不匹配错误
内容的提问来源于stack exchange,提问作者Z T
相关产品推荐
相关产品推荐

