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

エラーメッセージ

npm error code DEPTH_ZERO_SELF_SIGNED_CERT

別の表記

  • npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT

npm 10 以降は「npm error code DEPTH_ZERO_SELF_SIGNED_CERT」、npm 9 以前は「npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT」と出力します。理由の行は「self-signed certificate」で、最近の Node.js のバージョンでは --use-system-ca のヒントが付きます。

npm (Node.js) — registry request over HTTPS

このエラーの意味

npm の接続先レジストリが、Node.js の信頼していない自己署名証明書を 1 枚だけ提示しました。CA のチェーンはまったく存在しないため、解決策は、その証明書そのものを意図的に信頼するか、CA が発行した証明書をレジストリに設定するかのどちらかしかありません。生成された証明書で起動したローカルまたはセルフホストのレジストリでよく起こります。

発生する理由

修正方法

  1. 1.

    この証明書だけを信頼する

    証明書を取得し、その SHA-256 フィンガープリントをレジストリのホスト上で表示されるものと比較してから、NODE_EXTRA_CA_CERTS(または npm の cafile)で追加してください。

    bash
    # Save the registry's certificate, check its fingerprint, and trust exactly this file
    openssl s_client -connect registry.example.com:443 -servername registry.example.com </dev/null 2>/dev/null \
      | openssl x509 -out registry.pem
    openssl x509 -in registry.pem -noout -fingerprint -sha256
    NODE_EXTRA_CA_CERTS=$PWD/registry.pem npm install
  2. 2.

    プライベートレジストリを自組織のスコープに限定する

    自組織のスコープだけをプライベートレジストリに振り分ければ、公開パッケージはすべて registry.npmjs.org から取得されるため、プライベートなホストで証明書の問題が起きても影響を受けません。

    ini
    ; .npmrc — only @acme packages come from the private registry; the rest from npmjs
    @acme:registry=https://registry.example.com/
  3. 3.

    CA が発行した証明書をレジストリに設定する

    パブリック CA(ACME)の証明書、またはマシンがすでに信頼している社内 CA の証明書を使えば、証明書ごとの例外は不要になります。

    bash
    # Give the registry a certificate from a CA your machines trust (public ACME or company CA)
    sudo certbot certonly --standalone -d registry.example.com

関連するエラー

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