【初心者でも安心】Node.js/npmで「npm ERR! code SELF_SIGNED_CERT_IN_CHAIN」エラーが発生?解決策を画像付きで分かりやすく解説

2024-06-23

Node.js と npm で発生する "npm ERR! code SELF_SIGNED_CERT_IN_CHAIN" エラーについて

"npm ERR! code SELF_SIGNED_CERT_IN_CHAIN" エラーは、Node.js パッケージマネージャーである npm で発生するエラーです。このエラーは、npm がレジストリからパッケージをダウンロードしようとしたときに、レジストリの証明書が自己署名されている場合に発生します。

自己署名証明書とは、信頼できる認証局ではなく、発行者自身が署名した証明書です。一般的には、信頼性が低いため、ブラウザや他のソフトウェアによって拒否されます。

エラーが発生する原因

npm レジストリ (https://www.npmjs.com/package/registry.npmjs.org) は、自己署名証明書を使用しています。これは、npm がオープンソースプロジェクトであり、誰でもパッケージを公開できるようにするためです。

エラーの解決方法

このエラーを解決するには、以下の方法があります。

npm の "strict-ssl" オプションを無効化する

npm には、"strict-ssl" というオプションがあります。このオプションは、npm が自己署名証明書を含むレジストリからパッケージをダウンロードすることを許可します。

npm config set strict-ssl false

このコマンドを実行すると、"strict-ssl" オプションが無効化されます。ただし、これはセキュリティ上のリスクがあることに注意してください。

信頼できる証明書を使用する

npm は、CAcert という信頼できる証明書を使用することができます。CAcert をインストールするには、以下の手順を実行します。

  1. ダウンロードした証明書を ~/.npm-global/cacert.pem ファイルに保存します。
  2. 以下のコマンドを実行して、npm が CAcert 証明書を使用するように設定します。
npm config set cafile ~/.npm-global/cacert.pem

別のパッケージマネージャーを使用する

Yarn (https://classic.yarnpkg.com/lang/en/docs/cli/install/) や pnpm (https://pnpm.io/installation) などの他のパッケージマネージャーは、自己署名証明書をサポートしているため、このエラーが発生しません。

注意事項

  • "strict-ssl" オプションを無効化することは、セキュリティ上のリスクがあるため、最後の手段として使用するようにしてください。
  • 信頼できる証明書を使用する場合は、必ず公式のソースからダウンロードしてください。
  • 別のパッケージマネージャーを使用する場合は、既存のプロジェクトで npm を使用している場合、互換性の問題が発生する可能性があることに注意してください。



    // npm ERR! code SELF_SIGNED_CERT_IN_CHAIN エラーが発生する例
    
    const https = require('https');
    
    https.get('https://registry.npmjs.org/', (res) => {
      console.log('statusCode:', res.statusCode);
      // エラーが発生
    });
    
    Error: self signed certificate in certificate chain
    

    これは、https://registry.npmjs.org/ レジストリの証明書が自己署名されているためです。

    以下のコードは、"strict-ssl" オプションを無効化してエラーを解決する例です。

    // npm config set strict-ssl false
    
    const https = require('https');
    
    https.get('https://registry.npmjs.org/', (res) => {
      console.log('statusCode:', res.statusCode);
      // エラーが発生しない
    });
    

    以下のコードは、CAcert 証明書を使用してエラーを解決する例です。

    // 信頼できる証明書をインストールして、npm config set cafile を設定する
    
    const https = require('https');
    
    https.get('https://registry.npmjs.org/', (res) => {
      console.log('statusCode:', res.statusCode);
      // エラーが発生しない
    });
    

    このコードを実行するには、CAcert 証明書をインストールし、npm config set cafile コマンドで npm に証明書ファイルを指定する必要があります。

    • 上記のコードはあくまで例であり、実際の使用状況に合わせて調整する必要があります。



    npm ERR! code SELF_SIGNED_CERT_IN_CHAIN エラーの解決方法:代替手段

    http を使用する

    npm は、HTTPSではなくHTTPを使用してレジストリからパッケージをダウンロードすることができます。ただし、これはセキュリティ上のリスクがあることに注意してください。

    npm install http://registry.npmjs.org/@angular/core
    

    プロキシサーバーを使用している場合は、npm にプロキシサーバーを設定することができます。

    npm config set proxy http://<proxy_server>:<proxy_port>
    

    環境変数を使用する

    以下の環境変数を設定することで、npm に証明書ファイルを指定することができます。

    NODE_TLS_REJECT_UNAUTHORIZED=0
    

    レジストリをミラー化する

    独自のレジストリをミラー化することで、自己署名証明書の問題を回避することができます。

    別のレジストリを使用する

    • 上記の方法はすべて、自己署名証明書によるセキュリティ上のリスクを伴います。
    • 使用する前に、各方法の利点と欠点を比較検討してください。
    • 重要な環境では、自己署名証明書ではなく、信頼できる証明書を使用することをお勧めします。

      node.js npm


      Node.js 単体テストのサンプルコード(Jest使用)

      ユニットテストを行うことで、以下の利点が得られます。コードの品質向上: テストを書くことで、コードの意図した動作を明確にし、潜在的なバグを発見しやすくなります。保守性の向上: テストによってコードの変更が意図した動作に影響を与えていないことを確認できます。...


      Node.jsとMariaDBでSequelizeを使ってジオロケーション検索をマスター!

      このチュートリアルを開始するには、以下のものが必要です。Node. js がインストールされているnpm または yarn がインストールされているMariaDB データベースサーバーが実行されているSequelize ORM がインストールされている...


      Node.jsプロジェクトでサブディレクトリのpackage.jsonにあるstartスクリプトを実行する方法

      方法npm start コマンドを別のディレクトリで実行するには、以下の方法があります。--prefix オプションを使用するnpm start コマンドに --prefix オプションを指定することで、実行するディレクトリを指定できます。...


      【JavaScript・React.js・npm】「Local package.json exists, but node_modules missing」エラーの解決策を徹底解説!

      原因このエラーメッセージは、以下のいずれかの理由で発生します。プロジェクトディレクトリに初めて package. json ファイルを作成したばかりである。プロジェクトを別のコンピューターにコピーした。node_modules フォルダが削除または破損している。...


      「Server Discovery And Monitoring engine is deprecated」エラーのその他の解決方法

      「Server Discovery And Monitoring engine is deprecated」というエラーは、MongoDBとの接続において、古い接続方法が非推奨となり、将来のバージョンで削除されることを示します。これは、JavaScript、Node...


      SQL SQL SQL SQL Amazon で見る



      node.js、ssl-certificate、npmで「Error: SSL Error: SELF_SIGNED_CERT_IN_CHAIN」エラーが発生した時の対処法

      npm を使用中に Error: SSL Error: SELF_SIGNED_CERT_IN_CHAIN エラーが発生する場合、これは自己署名証明書の問題が原因です。原因このエラーは、npm がアクセスしようとしているレジストリが自己署名証明書を使用している場合に発生します。 自己署名証明書は、信頼できる認証局によって発行されていない証明書です。 npm はデフォルトでこれらの証明書を信頼しないため、エラーが発生します。


      Node.jsでnpmを使う際に発生する「SSL Error: CERT_UNTRUSTED」の解決法とは?

      npmコマンドで「SSL Error: CERT_UNTRUSTED」エラーが発生するのは、主に以下の2つの原因が考えられます。古いバージョンのNode. jsを使用している2021年9月以降、古いバージョンのNode. js(8.x以前、または10


      Node.jsで「npm install」エラー発生!「unable to get local issuer certificate」の原因と解決策を徹底解説

      "npm install error - unable to get local issuer certificate" は、Node. js パッケージマネージャーである npm でパッケージをインストールしようとすると発生するエラーメッセージです。このエラーは、npm が SSL/TLS 証明書を検証できないことを示しています。SSL/TLS 証明書は、ウェブサイトやサーバーのアイデンティティを確認するために使用されるデジタル証明書です。