本文へスキップ
ecdsa.com
npm (Node.js)パッケージマネージャー

エラーメッセージ

npm error code SELF_SIGNED_CERT_IN_CHAIN

別の表記

  • npm ERR! code SELF_SIGNED_CERT_IN_CHAIN
  • npm error request to https://registry.example.com/lodash failed, reason: self-signed certificate in certificate chain

npm 10 以降は「npm error code SELF_SIGNED_CERT_IN_CHAIN」、npm 9 以前は「npm ERR! code SELF_SIGNED_CERT_IN_CHAIN」と出力します。続く行では、コードが errno として繰り返され、URL が「reason: self-signed certificate in certificate chain」とともに示されます。

npm (Node.js) — registry request over HTTPS

このエラーの意味

レジストリへの接続で提示された証明書チェーンが、Node.js の知らない自己署名のルートで終わっています。registry.npmjs.org の場合、これは通信が傍受されて再署名されていることを意味します。ほぼ必ず、社内プロキシか HTTPS スキャン機能を持つウイルス対策製品によるもので、そのルートはブラウザーには信頼されていても、npm には信頼されていません。

発生する理由

修正方法

  1. 1.

    cafile でプロキシのルートを npm に渡す

    ルート証明書(IT 部門から入手するか、OS のトラストストアから取得します)を PEM 形式でエクスポートし、npm の cafile に設定してください。設定後の npm はそのファイル内の CA だけを信頼するため、社内ネットワークの外でも使うノートパソコンでは、同じファイルにパブリックルートも追加するか、NODE_EXTRA_CA_CERTS を優先して使ってください。

    bash
    npm config set cafile /etc/ssl/private-ca/corp-proxy-root.pem
    npm install
  2. 2.

    または NODE_EXTRA_CA_CERTS を設定する

    Node.js のパブリックルートを置き換えることなく、npm とその他すべての Node.js ツールにルートを追加します。Windows では、ユーザー環境変数として設定し、新しいターミナルを開いてください。

    bash
    # Windows (PowerShell): setx NODE_EXTRA_CA_CERTS C:\certs\corp-proxy-root.pem
    export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-proxy-root.pem
    npm install
  3. 3.

    または Node.js に OS のストアを使わせる

    NODE_USE_SYSTEM_CA=1 を設定すると、Node.js(と npm)はオペレーティングシステムが信頼するものを信頼するようになります。管理対象のマシンでは、そこにプロキシのルートも含まれます。

    bash
    # Managed machines already trust the proxy root in the OS store
    NODE_USE_SYSTEM_CA=1 npm install
  4. 4.

    一時的な診断:--strict-ssl=false

    信頼の問題であることを確かめるためだけに使ってください。パッケージはインストールスクリプトを実行するため、検証されていないダウンロードを受け入れることは、まさにサプライチェーン攻撃が開発者のマシンに入り込む経路です。strict-ssl=false を .npmrc に書いてはいけません。

    bash
    # Temporary diagnostic for one command only
    npm install --strict-ssl=false

関連するエラー

署名エラーデータベースをすべて見る