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

エラーメッセージ

npm error code CERT_HAS_EXPIRED

別の表記

  • npm ERR! code CERT_HAS_EXPIRED
  • npm error request to https://registry.example.com/lodash failed, reason: certificate has expired

npm 10 以降は「npm error code CERT_HAS_EXPIRED」、npm 9 以前は「npm ERR! code CERT_HAS_EXPIRED」と出力します。続く行には、URL と「reason: certificate has expired」が示されます。

npm (Node.js) — registry request over HTTPS

このエラーの意味

npm がレジストリ(または途中にあるプロキシ)から受け取ったチェーン内のいずれかの証明書が、このマシンの時計で見て有効期限を過ぎています。公開レジストリの場合、npm 自身の証明書が期限切れになったことを意味することはほとんどありません。npm の設定に固定された古い CA、更新されていない Node.js のルートリスト、プロキシの証明書、時計のずれのいずれかを示しています。プライベートレジストリの場合は、サーバーの証明書が実際に期限切れになっている可能性があります。

発生する理由

修正方法

  1. 1.

    関係しているレジストリと証明書を確認する

    設定されているレジストリと、そのレジストリが返す証明書の有効期限を確認してください。プライベートレジストリの証明書が期限切れの場合は、サーバー側で更新しなければなりません。

    bash
    npm config get registry
    echo | openssl s_client -connect registry.example.com:443 -servername registry.example.com 2>/dev/null \
      | openssl x509 -noout -subject -enddate
  2. 2.

    古い ca または cafile 設定を削除する

    npm config list は、すべての階層の .npmrc の設定を表示します。古い証明書を指している ca や cafile のエントリを削除してください(または、参照先のファイルを更新してください)。

    bash
    # An old CA pinned in .npmrc replaces the default roots: list and remove it
    npm config list | grep -E '^;? *(ca|cafile)'
    npm config delete ca
    npm config delete cafile
  3. 3.

    Node.js と npm をアップグレードする

    サポートが継続している Node.js のリリースには、最新のルートリストが含まれています。その後で npm をアップグレードしてください。

    bash
    node -v && npm -v   # Node.js bundles its root list; very old releases carry expired roots
    # upgrade Node.js to a maintained release (nvm, fnm, volta or your OS packages), then:
    npm install -g npm@latest

関連するエラー

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