エラーメッセージ
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
このエラーの意味
チェーンが Node.js の信頼しない自己署名のルートで終わっているため、Yarn Classic はレジストリの証明書を検証できませんでした。Yarn は Node.js のエラーをそのまま出力し、その下にスタックトレースを表示します。社内ネットワークでは、これは TLS を検査するプロキシの典型的な症状です。そのプロキシのルートはブラウザーには信頼されていても、Node.js には信頼されていません。
発生する理由
TLS を検査するプロキシが registry.yarnpkg.com を再署名している
よくある社内のプロキシは、独自のルートから発行した証明書を提示します。OS はそのルートを信頼しますが、Node.js は信頼しません。
独自のルートを送信するプライベートレジストリ
ときどき社内の証明書を使う社内レジストリです。チェーンにルートが含まれていても、クライアント側でそのルートを信頼させる必要があります。
Node.js が OS のトラストストアを無視している
ときどきYarn は Node.js 上で動作し、Node.js は特に指定しない限り、組み込みのルートリストを使います。
修正方法
- 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.
または 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.
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.
一時的な診断:strict-ssl false
問題が信頼だけであることを確認できます。パッケージはインストールスクリプトを実行するため、検証を無効にしたままにすると、すり替えられたパッケージを招き入れることになります。テストが終わったらすぐに設定を削除してください。
bash # Temporary diagnostic only; revert immediately afterwards yarn config set strict-ssl false && yarn install; yarn config delete strict-ssl