npmの使用中にエラーを受け取る:「エラー:SSLエラー:SELF_SIGNED_CERT_IN_CHAIN」


292

私はubuntuでnpm v1.0.104 / node 0.6.12を使用しています-npmを介して新しいモジュールをインストールしようとすると、以下のエラーメッセージが表示されます(httpsではなくhttpを使用して以前にsocket.ioをテストしましたが、それが可能かどうか疑問に思っています) npm / unsigned certsで問題が発生しました)。npmが「https://registry.npmjs.org」のURL を解決しようとすると、エラーがポップアップ表示されます。とにかくnpmを使用し続けるために、エラーを無視するか、信頼できるストアに証明書を見つけて追加することができますか?

問題を解決するために何をする必要があるかについての洞察は高く評価されます(可能な場合は再インストールするのではなく、構成を通じて問題を解決したいと思います)。

エラー:「エラー:SSLエラー:SELF_SIGNED_CERT_IN_CHAIN」

完全なメッセージ:

npm ERR! Error: SSL Error: SELF_SIGNED_CERT_IN_CHAIN
npm ERR!     at ClientRequest.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/main.js:252:28)
npm ERR!     at ClientRequest.emit (events.js:67:17)
npm ERR!     at HTTPParser.onIncoming (http.js:1261:11)
npm ERR!     at HTTPParser.onHeadersComplete (http.js:102:31)
npm ERR!     at CleartextStream.ondata (http.js:1150:24)
npm ERR!     at CleartextStream._push (tls.js:375:27)
npm ERR!     at SecurePair.cycle (tls.js:734:20)
npm ERR!     at EncryptedStream.write (tls.js:130:13)
npm ERR!     at Socket.ondata (stream.js:38:26)
npm ERR!     at Socket.emit (events.js:67:17)
npm ERR! Report this *entire* log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>
npm ERR! 
npm ERR! System Linux 2.6.38-13-generic
npm ERR! command "node" "/usr/bin/npm" "install" "jed"
npm ERR! node -v v0.6.12
npm ERR! npm -v 1.0.104

1
厳密なSSLを削除しないでください。見ていstackoverflow.com/a/16534065を
nolim1t

15
2014年2月27日以降、npmは自己署名証明書をサポートしなくなりました。詳細については、npmのブログ投稿または以下の最近の回答を参照してください。
Kevin Reilly、

1
あなたがAWS Elastic Beanstalkでのこれで問題を抱えている場合は、解決策はここにあります:stackoverflow.com/questions/22096459/...
ギヨームフランドル

1
nolim1t:これは問題の原因に対処していない、とケビン:ブログ記事内のコマンドが不完全です。私にとって有効なコマンドについては、stackoverflow.com / a / 22099006/106302を参照してください。
私たちは全員モニカです14

1
@ali 'Accepted answer'を変更してくださいこの問題は、npmのアップグレードが原因で発生し、SSLの問題ではありません。SSLをオフにするのは悪いことです。特に、現在正しい応答はnpmを更新することであるためです。Kevin Reillyの回答がAcceptedの回答になります。ありがとうございました。
Mikezx6r 2014年

回答:


391

次のコマンドを実行すると、問題の解決に役立ちました。

npm config set strict-ssl false

この時点で他の問題が発生するかどうかについてはコメントできません。それが役に立てば幸い。


39
代わりに「npm config set ca null」を実行し、sslエラーを無視することは悪い考えです
アレックス

6
@SnowInferno SSLは、実際のregistry.npmjs.orgと通信していることも保証します。誰かが悪意のあるパッケージをインストールする可能性があります。
adotout 2014年

58
これは不潔に間違っています。毎回SSLをオフにするはずなのに、SSLを使用することに煩わされているのはなぜですか?「エラーを無視することはいつでも成功につながりますが、開発者はそれを行うつもりです。」
djechlin 14年

20
sslの問題は無視しないでください。エラーは非常に正当な理由があるためです。:また、検索のビットは、次のつぶやき、あなたの問題を公式溶液(更新NPM)へのリンクになったtwitter.com/npmjs/status/439279809307242496
トーマスVervest

41
「npm config set ca null」と「npm config set ca ""」で遅れているプロキシが原因で問題が発生しましたが、同じエラーが発生しましたが、SSLの削除は完全に機能しました。時々、良い実践は実際に機能するものほど重要ではありません。
Cory Schulz

220

2014年2月27日以降、npmは自己署名証明書をサポートしなくなりましたnpmが推奨する次のオプションは、次のいずれかを実行することです。

npmのバージョンをアップグレードする

npm install npm -g --ca=""

-または-

現在のバージョンのnpmに、既知のレジストラを使用するように伝えます

npm config set ca ""

更新: npmがSELF_SIGNED_CERT_IN_CHAINおよびnpmに関する追加のヘルプを投稿し、異なる環境に固有のソリューションを追加しました



sudo推奨事項の 前に追加する必要がある場合とない場合があります。


その他のオプション

人々はnpmの推奨事項を使用して問題を抱えているようですので、ここにいくつかの他の潜在的な解決策があります。

ノード自体のアップグレード
このエラーが発生する場合は、古いバージョンのノードが存在する可能性があります。当然、古いバージョンのnpmが付属しています。1つの解決策は、ノードのバージョンをアップグレードすることです。これにより、最新の状態になり、既存のバグや脆弱性が修正されるため、おそらくこれが最良のオプションです。

ここでのプロセスは、ノードのインストール方法、オペレーティングシステムなどによって異なります。

npmの更新パッケージ
を試行中にここにたどり着いたので、同じエラーで失敗するinstall可能性がnpm install npm -gあります。その場合は、update代わりに使用してください。Nisanth Sojanが示唆したように:

npm update npm -g

npmの代替を更新
する根本的な問題を回避する1つの方法は、既知のレジストラを使用してインストールし、既知のレジストラの使用を停止することです。jnylenが示唆しているように:

npm config set ca ""
npm install npm -g
npm config delete ca

10
最も簡単な解決策は、Nodejs自体の最新バージョンをダウンロードすることです。この問題が解決されたnpmの新しいバージョンが含まれています。上記のコマンドはどれも機能しませんでした。
Strille、2014

1
これはsslを無視しない最初のソリューションなので、私はこのソリューションを使用します(設定でチェックをfalseに設定するか、代わりにhttpを使用します)。ありがとう!
hcpl 2014

12
npm install npm -gでもエラーSELF_SIGNED_CERT_IN_CHAIN
Anders Bornholm

3
これが機能しない場合は、npm config set ca ""最初に実行してからアップグレードし、構成の変更を元に戻します。参照:stackoverflow.com/a/22099006/106302
私たちは全員モニカです14

1
@Redsandro sudoはユーザーを変更し、-gフラグはそのユーザーに対してグローバルにインストールするか、ローカルにのみインストールするかを設定しますnode_modules
Radek

68

今のところ、レジストリのURLをhttpsからhttpに切り替えました。このような:

npm config set registry="http://registry.npmjs.org/"

1
私にとっては魅力のように働きました。元のCAをなくしたり、SSLエラーを無視したりしたくありませんでした。
SnowInferno 2014年

完璧に働きました。ありがとう!
ムハンマドバジル2014

13
セキュリティを無効にすることは解決策にはなりません!
アレッサンドロペッツァート2014

1
私は以前これを使用していましたが、何らかの理由で「http://」から「https://」に戻すと、再び動作しました。
kshreve、2015年

他のすべての解決策を試した後、最終的に私のためにこの作業を行いました:-)
Swapnil Kadu

49
npm config set strict-ssl false -g

グローバルに保存するには


これを行うと、悪名高いcb() never called!npmエラーが発生します
Jeremy

この設定の後、エラーnpm ERRを下回っています。コードE401 npm ERR!認証できません、必要です:交渉、NTLM npm ERR!この実行の完全なログは、npm ERR!C:\ BuildAgent \ npm-cache_logs \ 2019-06-24T10_23_46_563Z-debug.log
Shami Qureshi

31

npmをアップグレードする必要があります。

// Do this first, or the upgrade will fail
npm config set ca ""

npm install npm -g

// Undo the previous config change
npm config delete ca

これらのコマンドの前にを付ける必要がある場合がありますsudo

出典:http : //blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more


@オリバーザルツブルク:re。あなたの編集:OS XI sudoではまったく必要ないと思い、アップグレードコマンドの前にプレフィックスを付けるだけでsudoうまくいきました。YMMV。
私たちは全員モニカです14

ああ、これでうまくいきました。構成の変更を元に戻すための具体的な指示をありがとう(だから私は自分でそれを掘り下げる必要がなかった)!
マット

面白い。私はこれをDebianサーバーでテストした後にのみ編集を行いました。でも私は現在のリビジョンが好きです;)
Der Hochstapler '28 / 02/28

Ubuntu / Debianには追加のリンクが必要です。以下の私の回答を参照してください。
Redsandro 2014

2
これは受け入れられる解決策です。これはセキュリティを無効にするものではなく、npmブログに記載されている「公式」ソリューションです。
Alessandro Pezzato

21

このエラーSELF_SIGNED_CERT_IN_CHAINは、基本的にシステムによって信頼されていない証明書チェーンに自己署名証明書があることを意味します。

それが起こった場合、基本的に怪しいことが起こっているため、すでにコメントされているように、証明書のチェックを無効にするだけではなく、問題の原因を理解して原因を修正することをお勧めします。

これはおそらく次のいずれかに関連しています:

  • 適切な証明書を持たないカスタムリポジトリアドレス、

  • 透過プロキシを備えた企業ネットワーク。

    企業のWebプロキシの背後にいる場合は、適切なHTTP_PROXY/ HTTPS_PROXY環境変数を設定するか、次のように設定しますnpm

    npm config set proxy http://proxy.company.com:8080
    npm config set https-proxy http://proxy.company.com:8080

    参照:企業のWebプロキシの背後でNode.jsとNpmを設定する方法

ホストを信頼する場合は、チェーンから自己署名証明書をエクスポートしてシステムにインポートし、信頼できるものとしてマークすることができます。

これは、(にexample.com基づいて失敗しているnpm repoに変更する)によって証明書をチェックすることで実現できますnpm-debug.log

openssl s_client -showcerts -connect example.com:443 < /dev/null

その後、証明書の内容(の間で保存BEGINおよびENDに).crtそれをインポートするために、ファイルを。

Linux

提案に従って、次のようにエクスポートされた証明書を/etc/environmentファイル(ノード7.4以降)に追加できます。

NODE_EXTRA_CA_CERTS=/etc/pki/ca-trust/source/anchors/yourCer‌​ts.pem

CentOS

CentOS 5では、これを/etc/pki/tls/certs/ca-bundle.crtファイルに追加できます。

ex +'g/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq | sudo tee -a /etc/pki/tls/certs/ca-bundle.crt
sudo update-ca-trust force-enable
sudo update-ca-trust extract
npm install

注:最初の証明書のみをエクスポートするにgは、最初に削除します。

CentOS 6では、証明書ファイルをにコピーできます/etc/pki/ca-trust/source/anchors/

Ubuntu / Debian

Ubuntu / Debianでは、CRTファイルをにコピーして/usr/local/share/ca-certificates/ 実行します。

sudo update-ca-certificates

マックOS

macOSでは次を実行できます。

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/foo.crt

ウィンドウズ

Windowsの場合: certutil -addstore -f "ROOT" new-root-certificate.crt


参照:npm-トラブルシューティング-SSLエラー


1
>その場合は、自己署名証明書をチェーンからエクスポートしてシステムにインポートし、信頼できるものとしてマークする必要があります。-私のためにトリックを作ります。
dmi3y 2016

2
すごい!また、NODE_EXTRA_CA_CERTS = / etc / pki / ca-trust / source / anchors / yourCerts.pemを/ etc / environmentに追加することもできます。ノード7.4+はこれを考慮に入れています
ph4r05

9

コマンドの前にこれを置くとうまくいくようNODE_TLS_REJECT_UNAUTHORIZED=0です。例:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

ノードに自己署名証明書が有効であると認識させる方法を理解するのが最善です。上記のstrict-sslの提案は、何らかの理由でうまくいきませんでした。セキュリティへの影響を理解していて、一時的な迅速な修正が必要な場合は、Googleがエラーを検索しているときにgithubのランダムな問題でこれが見つかりました。


1
Windowsの場合、「set NODE_TLS_REJECT_UNAUTHORIZED = 0」を使用します。そして、魅力のように動作します!!
Tarun

8

リポジトリは自己署名証明書をサポートしなくなりました。アップグレードする必要がありますnpm

// Disable the certificate temporarily in order to do the upgrade
npm config set ca ""

// Upgrade npm. -g (global) means you need root permissions; be root 
// or prepend `sudo`
sudo npm install npm -g

// Undo the previous config change
npm config delete ca

// For Ubuntu/Debian-sid/Mint, node package is renamed to nodejs which 
// npm cannot find. Fix this:
sudo ln -s /usr/bin/nodejs /usr/bin/node

更新されたを使用するには、新しいターミナルセッションを開く必要がありnpmます。

出典:これは元々jnylenの回答の編集でした。ガイドラインには「すべての建設的な編集を歓迎しますが、大幅に編集してください」とありますが、編集は拒否されました。「この編集は元の投稿の変更が多すぎるため、投稿の元の意味や意図が失わ」た。コミュニティは別の答えを好むと思います。


これでうまくいきました。ただし、最後のコマンドは必要ありませんでしたsudo ln -s /usr/bin/nodejs /usr/bin/node
absynce 14

1
おそらく、公式のUbuntuリポジトリからインストールしたか、サードパーティのリポジトリ(新しいバージョンの場合)からインストールしたか、または自分でコンパイルしたか(最新バージョンの場合)によって異なります。
Redsandro 2014年

7

人の方のためのMACを経由して同じ問題やインストールNPMとの自作

brew uninstall npm

その後

brew install npm

OSX(10.9.1)で動作します

編集brew updatenpmをインストールする前に必要な場合があります。brew upgrade自作を更新した後も行うことができます。またbrew doctor、他の問題が発生した場合にも実行すると役立つ場合があります。


4

迅速でクリーンなソリューション(Linuxでテスト済み)(2014年2月27日fatidic後)


npmをアンインストールする

npm rm npm -g

npmをインストールします(新しいURLはnpmjs.orgではなくwww.npmjs.orgです

curl https://www.npmjs.org/install.sh | sh

ヒント:Linuxにnode.jsをインストールする方法https://stackoverflow.com/a/22099363/333061


リダイレクト301によりコマンドは機能しなくhttps://www.npmjs.org/install.shなりましたが、手動で実行する前にブラウザーに入力してダウンロードできます。
svassr 2014


前のcurl https://npmjs.org/install.shコマンドがリダイレクトするためhttps://www.npmjs.org/install.shcurl https://www.npmjs.org/install.sh | shシームレスに動作します。これから小さなパダワンにインストールして構いません。:)
Igor Parra


2

SSLをオフにすることは非常に悪い考えのようです。npmのブログでは、自己署名証明書はサポートされなくなったと説明されています。彼らはを介してnpmをアップグレードすることを提案してnpm install npm -gいますが、もちろん同じSELF_SIGNED_CERT_IN_CHAINエラーが発生しました。それで、ノードを更新しました。これにより、npmも更新されました。正確な手順は、最初にノードをインストールした方法によって異なります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.