エラーメッセージ
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、プロキシのルート、中間証明書の欠落、自己署名証明書のどれが原因でもこのコードになります。
発生する理由
まず最後の行を確認する:このコードは単なるネットワークエラーにも使われる
よくあるERR_PNPM_RESOLVING_NPM_RESOLVER_NETWORK_ERROR は、DNS、接続、プロキシの障害にも使われます。証明書の問題であるのは、原因の連鎖が「invalid peer certificate」で終わっている場合だけです。
社内の証明書を使うプライベートレジストリ
よくあるpnpm が信頼する CA のセットに含まれていない社内 CA で署名された、社内レジストリが該当します。
TLS を検査するプロキシ
よくある社内ネットワークでは、registry.npmjs.org がプロキシのルートで再署名されます。
レジストリが自己署名証明書を使っているか、リーフ証明書だけを送信している
ときどきrustls はこれらのケースを区別しません。自己署名証明書の場合も、中間証明書が欠けている場合も、同じく UnknownIssuer になります。
修正方法
- 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.
ルートをオペレーティングシステムのストアにインストールする
ecdsa.com のテストでは、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.
または NODE_EXTRA_CA_CERTS を使う
pnpm 12 もこの変数に従うため、Node.js、npm、pnpm で 1 つの設定を共通して使えます。
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