【初心者でも安心】Node.js/npmで「npm ERR! code SELF_SIGNED_CERT_IN_CHAIN」エラーが発生?解決策を画像付きで分かりやすく解説
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 をインストールするには、以下の手順を実行します。
- ダウンロードした証明書を
~/.npm-global/cacert.pem
ファイルに保存します。 - 以下のコマンドを実行して、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