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

Node.js TLS双向通信报self signed certificate错误如何解决?

错误根因

DEPTH_ZERO_SELF_SIGNED_CERT错误是客户端TLS握手时校验服务端证书不通过导致的,常见原因如下:

  • 服务端证书的Common Name(CN)字段与客户端访问的主机名不一致:你的客户端访问地址是localhost,如果生成服务端证书时填写的CN不是localhost,就会触发校验失败
  • 同一CA签发的证书序列号重复:你生成服务端、客户端证书时都指定了-set_serial 01,同一个CA签发的所有证书序列号必须唯一,冲突会导致证书校验异常
  • 客户端加载的CA证书与签发服务端证书的CA证书不匹配:如果客户端读的ca.crt不是当初签发server.crt的CA证书,就会把服务端证书识别为未被信任的自签名证书
  • 证书文件路径错误:代码中读取证书文件用的是相对路径,若运行代码时的工作目录和证书存放目录不一致,会读取到错误的证书文件
修复方案

正规修复方案(可用于生产环境)

  1. 校验服务端证书的CN字段
    执行命令查看服务端证书的主体信息:
openssl x509 -in server.crt -text -noout | grep "Subject"

确认输出中CN =后面的值为localhost,如果不匹配,重新生成服务端CSR时,Common Name项填写localhost后再签发服务端证书。

  1. 修正客户端证书的序列号
    重新生成客户端证书,将序列号改为唯一值(比如02):
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt
  1. 校验证书链有效性
    执行命令验证服务端证书是否可以被当前CA证书信任:
openssl verify -CAfile ca.crt server.crt

如果输出为server.crt: OK则表示匹配,否则需要重新用当前CA签发服务端证书。

  1. 确认证书路径
    运行代码前确认工作目录下存在对应证书文件,也可以将代码中的相对路径改为绝对路径避免读错文件。

临时测试方案

仅本地测试时可以使用,生产环境绝对禁止开启:在客户端的options配置中添加rejectUnauthorized: false,跳过服务端证书校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:06:03