Node.jsでnpmを使う際に発生する「SSL Error: CERT_UNTRUSTED」の解決法とは?
npmコマンドで「SSL Error: CERT_UNTRUSTED」が発生する原因と解決策
npmコマンドで「SSL Error: CERT_UNTRUSTED」エラーが発生するのは、主に以下の2つの原因が考えられます。
- 古いバージョンのNode.jsを使用している
2021年9月以降、古いバージョンのNode.js(8.x以前、または10.x以前)では、証明書の検証方法が変更され、一部の認証局(CA)の証明書を信頼できなくなりました。これが原因で、npmコマンドを実行時に「SSL Error: CERT_UNTRUSTED」エラーが発生することがあります。
- ネットワーク環境に問題がある
ファイアウォールやプロキシサーバーなどのネットワーク設定が原因で、npmがレジストリにアクセスできない場合も、このエラーが発生することがあります。
解決策
Node.jsを最新バージョンに更新する
--caオプションを使用する
Node.js 10.x以降を使用している場合は、--ca
オプションを使用して、信頼できる認証局の証明書ファイルを指定することで問題を解決できます。具体的には、以下のコマンドを実行します。
npm install --ca <path-to-ca-file>
<path-to-ca-file>
には、信頼できる認証局の証明書ファイルへのパスを指定します。証明書ファイルは、PEM形式(.pem)またはDER形式(.der)である必要があります。
ネットワーク設定を確認する
ファイアウォールやプロキシサーバーを使用している場合は、npmがレジストリにアクセスできるように設定されていることを確認してください。具体的には、以下の設定を確認する必要があります。
- ファイアウォール: npmが使用するポート(デフォルトはポート443)が開いていることを確認してください。
- プロキシサーバー: npmがプロキシサーバー経由でレジストリにアクセスできるように設定されていることを確認してください。
npm cacheをクリアする
稀なケースですが、npmキャッシュが破損していることが原因でこのエラーが発生することがあります。その場合は、以下のコマンドを実行してnpmキャッシュをクリアすることができます。
npm cache clean --force
npxを使用する
npxは、npmパッケージをインストールして実行するためのコマンドラインツールです。npxは、Node.jsのバージョンに依存せずにパッケージをインストールするため、「SSL Error: CERT_UNTRUSTED」エラーが発生しにくくなります。以下のコマンドを実行して、npxを使用してパッケージをインストールできます。
npx install <package-name>
上記の方法で解決できない場合は、以下の情報も合わせて提供していただけると、より具体的な解決策を提案できる可能性があります。
- 使用しているNode.jsのバージョン
- 使用しているオペレーティングシステム
- 使用しているネットワーク環境(ファイアウォールやプロキシサーバーを使用している場合は、その設定情報)
- エラーメッセージの詳細
# Node.jsを最新バージョンに更新する
curl -sL https://deb.nodesource.com/setup_16.x | bash -s
sudo apt-get install -y nodejs
node -v
# --caオプションを使用する
npm install --ca /path/to/ca-file <package-name>
# npm cacheをクリアする
npm cache clean --force
# npxを使用する
npx install <package-name>
このコマンドは、Node.jsの最新バージョンのインストールスクリプトをダウンロードして実行します。
このコマンドは、npm install
コマンドを実行する際に、--ca
オプションを使用して、信頼できる認証局の証明書ファイルを指定します。<path-to-ca-file>
には、信頼できる認証局の証明書ファイルへのパスを指定します。
このコマンドは、npmキャッシュをクリアします。
このコマンドは、npx
コマンドを使用してパッケージをインストールします。
注意事項
--ca
オプションを使用する場合は、信頼できる認証局の証明書ファイルへのパスを正しく指定する必要があります。- npm cacheをクリアすると、インストール済みのパッケージの情報がすべて削除されます。
以下の環境変数を設定することで、npmが使用する証明書ファイルを指定できます。
NODE_TLS_REJECT_UNTRUSTED=0
この環境変数を設定すると、npmはすべての証明書を信頼し、「SSL Error: CERT_UNTRUSTED」エラーが発生しなくなります。ただし、これはセキュリティ上のリスクがあることに注意する必要があります。
自家署名証明書を使用する
問題が発生しているレジストリが自家署名証明書を使用している場合は、その証明書を信頼できる証明書ストアに追加することで問題を解決できる場合があります。具体的には、以下の手順を実行します。
- 自家署名証明書をPEM形式で保存します。
- 以下のコマンドを実行して、証明書を信頼できる証明書ストアに追加します。
sudo cp /path/to/certificate.pem /usr/local/share/ca-certificates/
sudo update-ca-certificates
特定のレジストリのみを信頼する
特定のレジストリのみを信頼したい場合は、~/.npmrc
ファイルに以下の設定を追加できます。
cafile=/path/to/ca-file
registry=<registry-url>
<path-to-ca-file>
には、信頼できる認証局の証明書ファイルへのパスを指定します。<registry-url>
には、信頼するレジストリのURLを指定します。
npm config set を使用する
npm config set strict-ssl false
上記の方法を試す前に、必ず以下の点に注意してください。
- これらの方法は、すべてセキュリティ上のリスクを伴います。
- これらの方法を実行する前に、npmのドキュメントをよく読んで理解してください。
- 問題が発生した場合は、npmコミュニティフォーラムで助けを求めることができます。
node.js ssl