web-dev-qa-db-ja.com

npmを使用中に「Error:SSL Error:SELF_SIGNED_CERT_IN_CHAIN」というエラーが表示される

私はnpm v1.0.104/node 0.6.12をubuntuで使用しています - 新しいモジュールをnpmでインストールしようとしているときに以下に示すエラーが表示されます。 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!     <[email protected]>
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
247
ali haider

次のコマンドを実行すると問題が解決しました。

npm config set strict-ssl false

現時点でそれが他の問題を引き起こすかどうか私はコメントできない。それが役に立てば幸い。

311
ali haider

現時点では、レジストリURLをhttpsからhttpに変更しました。このような:

npm config set registry="http://registry.npmjs.org/"
65
GermanZ
npm config set strict-ssl false -g

グローバルに保存する

33
Robin

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

30
jnylen

エラー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.comnpm-debug.logに基づいて失敗しているnpm repoに変更する)で証明書をチェックすることによって達成できます。

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

次に、証明書の内容(BEGINENDの間)を.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

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


npm - トラブルシューティング - SSLエラー もご覧ください。

11
kenorb

リポジトリは自己署名証明書をサポートしなくなりました。 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の答えを編集したものです。 "すべての建設的な編集を歓迎しますが、それを充実させてください。" 編集は のために却下されました。その投稿は失われるでしょう。」 コミュニティは別の答えを好むと思います。

8
Redsandro

同じ問題を抱えてmacをしていて、自作でnpmをインストールした人のために:

brew uninstall npm

それから

brew install npm

私のためにosxで動作します(10.9.1)

EDIT:npmをインストールする前にbrew updateをする必要があるかもしれません。自作を更新した後にbrew upgradeを行うこともできます。他の問題に遭遇した場合にもbrew doctorを実行するのが役に立つかもしれません。

7
Patrick

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

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

3
Adam Lane

迅速でクリーンな解決策(linuxテスト済み)(2014年2月27日の詐欺行為の後)


npmをアンインストールします

npm rm npm -g

npmをインストールする(代わりにwww.npmjs.orgを新しいURLにするnpmjs.org)。

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

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

3
Igor Parra

NPMをアンインストールしてから、もう一度インストールしてください。

2014年2月27日現在、npmは自己署名証明書をサポートしていません。 http://blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more

上記のリンクは、NPMを使用してNPMをアップグレードすることを提案しています。これもSELF_SIGNED_CERT_IN_CHAIN ...で失敗します。

2
Florian Winter

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

1
Jeremiah Orr