跳到主要内容
ecdsa.com
Yarn Classic (1.x)包管理器

错误信息

error Error: self-signed certificate in certificate chain

也可能输出为

  • error Error: self signed certificate in certificate chain

Yarn 1.x 打印“error Error: …”,后面跟着 Node.js 的堆栈跟踪(at TLSSocket.onConnectSecure …)。Node.js 16 及更早版本写作“self signed”。Yarn 4 以自己的格式报告 TLS 失败:“➤ YN0001: RequestError: <reason>”。

Yarn Classic (1.x) — registry request over HTTPS

含义

Yarn Classic 无法验证注册表的证书,因为证书链终止于一张 Node.js 不信任的自签名根证书。Yarn 原样打印 Node.js 的错误,下面附带堆栈跟踪。在公司网络中,这是执行 TLS 检查的代理的典型症状:浏览器信任它的根证书,Node.js 却不信任。

原因

修复方法

  1. 1.

    设置 Yarn 1 的 cafile

    用 yarn config set cafile 配置后,Yarn 会依据该 PEM 文件验证注册表;与 npm 的同名设置一样,它会在注册表请求中替换默认的根证书。

    bash
    # Yarn 1.x setting (stored in ~/.yarnrc)
    yarn config set cafile /etc/ssl/private-ca/corp-proxy-root.pem
    yarn config get cafile
  2. 2.

    或者使用 NODE_EXTRA_CA_CERTS

    为 Yarn 以及该环境中的其他所有 Node.js 工具,把根证书添加到 Node.js 的内置列表中。

    bash
    export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-proxy-root.pem
    yarn install
  3. 3.

    Yarn 4:httpsCaFilePath

    新版 Yarn 从 .yarnrc.yml 读取 httpsCaFilePath;Yarn 4 如果发现旧的 caFilePath 键,就会拒绝启动。

    yaml
    # Yarn 4 (Berry): .yarnrc.yml — Yarn 4 rejects the old caFilePath key
    httpsCaFilePath: /etc/ssl/private-ca/corp-proxy-root.pem
  4. 4.

    临时诊断:strict-ssl false

    用于确认问题只出在信任上。包会运行安装脚本,所以让验证一直处于关闭状态,就等于给被调包的软件包敞开大门;测试完成后立即删除这项设置。

    bash
    # Temporary diagnostic only; revert immediately afterwards
    yarn config set strict-ssl false && yarn install; yarn config delete strict-ssl

相关错误

浏览完整的签名错误库