跳到主要内容
ecdsa.com
pnpm 12 (native binary, rustls)包管理器

错误信息

Error: ERR_PNPM_RESOLVING_NPM_RESOLVER_NETWORK_ERROR

也可能输出为

  • Error: ERR_PNPM_PACKAGE_MANAGER_ADD_RESOLVE_LATEST

标题行中的错误码取决于命令:pnpm install 为 ERR_PNPM_RESOLVING_NPM_RESOLVER_NETWORK_ERROR,pnpm add 为 ERR_PNPM_PACKAGE_MANAGER_ADD_RESOLVE_LATEST。其下的原因链内容为“Failed to fetch metadata from <url>: error sending request: client error (Connect): invalid peer certificate: UnknownIssuer”,并按 80 列自动换行。pnpm 10 及更早版本运行在 Node.js 上,报告的则是 SELF_SIGNED_CERT_IN_CHAIN 或 UNABLE_TO_GET_ISSUER_CERT_LOCALLY 等 Node.js 错误码。

pnpm 12 (native binary, rustls) — registry request over HTTPS fails with "invalid peer certificate: UnknownIssuer"

含义

pnpm 12 无法从注册表获取包元数据,它打印的原因链以“invalid peer certificate: UnknownIssuer”结尾:这是 TLS 验证失败。pnpm 12 是原生二进制程序,其 HTTP 客户端用 rustls 验证证书,而“UnknownIssuer”是 rustls 对所有证书链构建失败统一使用的错误码:未知的私有 CA、代理根证书、缺失的中间证书或自签名证书。

原因

修复方法

  1. 1.

    在 .npmrc 中设置 cafile

    pnpm 读取 npm 风格的配置文件;cafile(或内联的 ca 值)会为注册表请求添加该 CA。

    ini
    ; .npmrc (project or ~/.npmrc) — read by pnpm as well as npm
    cafile=/etc/ssl/private-ca/corp-root-ca.pem
  2. 2.

    将根证书安装到操作系统的证书存储

    在我们的测试中,pnpm 12 接受了通过 update-ca-certificates 添加的根证书,因此 IT 部门部署的根证书无需额外配置即可生效。

    bash
    # pnpm 12 also trusts the operating system's store
    sudo cp corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt
    sudo update-ca-certificates
  3. 3.

    或者使用 NODE_EXTRA_CA_CERTS

    pnpm 12 同样支持这个变量,这样 Node.js、npm 和 pnpm 就可以共用同一项设置。

    bash
    # Honoured by pnpm 12 too, so one variable covers node, npm and pnpm
    export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-root-ca.pem
    pnpm install

相关错误

浏览完整的签名错误库