npm을 사용하는 동안 오류 수신 : '오류 : SSL 오류 : SELF_SIGNED_CERT_IN_CHAIN'


292

우분투에서 npm v1.0.104 / node 0.6.12를 사용하고 있습니다-npm을 통해 새 모듈을 설치하려고 할 때 아래에 복사 된 오류 메시지가 나타납니다 (https : //를 사용하지 않고 socket.io를 먼저 테스트했지만 https가 아닌 소켓을 테스트했습니다. 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/…
Guillaume Flandre

1
nolim1t : 문제의 원인을 해결하지 못하고 Kevin : 블로그 게시물의 명령이 불완전합니다. 나를 위해 일한 명령에 대해서는 stackoverflow.com/a/22099006/106302 를 참조하십시오 .
우리 모두 모니카

1
@ali '수락 된 답변'을 변경하십시오.이 문제는 SSL 문제가 아니라 npm 업그레이드로 인해 나타납니다. SSL을 끄는 것은 BAD이며, 특히 현재 올바른 응답이 npm을 업데이트하는 것이므로 특히 그렇습니다. Kevin Reilly의 답변이 수락 된 답변이어야합니다. 감사합니다.
Mikezx6r

답변:


391

다음을 실행하면 문제를 해결하는 데 도움이되었습니다.

npm config set strict-ssl false

현재로서는 다른 문제가 발생할지 여부에 대해서는 언급 할 수 없습니다. 도움이 되길 바랍니다.


39
대신 "npm config set ca null"을 실행하면 ssl 오류를 무시하는 것이 좋지 않습니다
alex

6
@SnowInferno SSL은 또한 실제 registry.npmjs.org와 대화하고 있음을 보증합니다. 누군가 악성 패키지를 설치할 수 있습니다.
adotout

58
이것은 매우 잘못된 것입니다. SSL을 꺼야 할 때마다 SSL을 사용하지 않는 이유는 무엇입니까? "오류를 무시할 때마다 성공으로 이어진다. 개발자는 바로 그렇게 할 것이다."
djechlin

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과 함께 제공되는 이전 버전의 노드가있을 수 있습니다. 한 가지 해결책은 노드 버전을 업그레이드하는 것입니다. 이것은 최신 버그를 일으키고 기존의 버그 및 취약점을 수정하므로 가장 좋은 옵션 일 것입니다.

여기서 프로세스는 노드, 운영 체제 등을 설치 한 방법에 따라 다릅니다.

npm 업데이트 패키지
를 사용하려고 할 install때 여기에 왔으므로 npm install npm -g동일한 오류로 실패 할 수 있습니다. 이 경우 update대신 사용하십시오. Nisanth Sojan이 제안한대로 :

npm update npm -g

npm 대안 업데이트
기본 문제를 해결하는 한 가지 방법은 알려진 레지스트라를 사용하고 설치 한 다음 알려진 레지스트라 사용을 중지하는 것입니다. jnylen이 제안한대로 :

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

10
가장 쉬운 해결책은 최신 버전의 Nodejs 자체를 다운로드하는 것이며 아마도이 문제가 해결 된 새로운 버전의 npm을 포함합니다. 위의 명령 중 어느 것도 나를 위해 일하지 않았습니다.
Strille

1
ssl을 무시하지 않는 첫 번째 솔루션 이므로이 솔루션을 사용합니다 (config에서 check를 false로 설정하거나 대신 http를 사용하여). 감사!
hcpl

12
npm install npm -g 또한 오류 SELF_SIGNED_CERT_IN_CHAIN
Anders Bornholm가

3
그래도 문제가 해결되지 않으면 npm config set ca ""먼저 업그레이드 한 다음 구성 변경을 취소하십시오. 참조 : stackoverflow.com/a/22099006/106302
우리 모두 모니카

1
@Redsandro sudo는 사용자를 변경하고, -g플래그는 해당 사용자를 위해 전역으로 설치하거나 로컬에 설치 할지를 설정합니다 node_modules.
Radek

68

지금은 레지스트리 URL을 https에서 http로 전환했습니다. 이처럼 :

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

1
나를 위해 매력처럼 일했습니다. 원래 CA를 잃거나 SSL 오류를 무시하지 않기를 원했습니다.
SnowInferno

완벽하게 작동했습니다. 감사!
muhammed basil

13
보안을 비활성화하는 것은 해결책이 될 수 없습니다!
Alessandro Pezzato

1
이전에 이것을 사용했지만 어떤 이유로 'http : //'에서 'https : //'로 다시 전환하면 다시 작동하게되었습니다.
kshreve

다른 모든 해결책을 시도한 후에,이 작업은 마침내 나를 위해 :-)
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.
우리는 모두 모니카

아, 이것은 나를 위해 일했다. 구성 변경 실행 취소에 대한 특정 지침에 감사드립니다 (따라서 직접 변경하지 않아도 됨)!
Matt

흥미 롭군 데비안 서버에서 이것을 테스트 한 후에 만 ​​편집했습니다. 나는 현재 개정판을 좋아하지만;)
Der Hochstapler

우분투 / 데비안은 추가 연결이 필요합니다. 아래 답변을 참조하십시오.
Redsandro

2
이것이 허용되는 솔루션이어야합니다. 이것은 보안을 비활성화하지 않으며 npm 블로그에 설명 된 "공식"솔루션입니다.
Alessandro Pezzato

21

이 오류 SELF_SIGNED_CERT_IN_CHAIN는 시스템에서 기본적으로 신뢰하지 않는 인증서 체인에 자체 서명 인증서 가 있음을 의미합니다.

이런 일이 발생하면 기본적으로 비린내가 발생하므로 사람들이 이미 언급했듯이 인증서 확인을 비활성화하는 것이 좋지 않지만 문제가 무엇인지 이해하고 문제의 원인을 해결하는 것이 좋습니다.

이것은 다음과 관련이있을 수 있습니다.

  • 올바른 인증서가없는 사용자 정의 저장소 주소

  • 투명한 프록시가있는 회사 네트워크.

    회사 웹 프록시를 사용하는 경우 적절한 HTTP_PROXY/ HTTPS_PROXY환경 변수를 설정하거나 다음을 통해 설정해야합니다 npm.

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

    회사 웹 프록시 뒤에 Node.js 및 Npm을 설정하는 방법을 참조하십시오.

호스트를 신뢰하는 경우 체인에서 자체 서명 된 인증서를 내보내고 시스템으로 가져 와서 신뢰할 수있는 것으로 표시 할 수 있습니다.

이는 다음을 통해 인증서를 확인하여 달성 할 수 있습니다 ( example.comnpm repo로 변경 하십시오 npm-debug.log.

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

그런 다음 인증서 내용 ( BEGIN및 사이 END)을 .crt파일 로 저장하여 가져옵니다.

리눅스

제안에 따라 다음과 같이 내 보낸 인증서를 /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/.

우분투 / 데비안

우분투 / 데비안에서 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

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 ...

노드가 자체 서명 된 인증서를 유효한 것으로 인식하게하는 방법을 알아내는 것이 가장 좋습니다. 위의 엄격한 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

1
공식 우분투 저장소, 타사 저장소 (최신 버전의 경우) 또는 직접 컴파일 (최신 버전의 경우) 여부에 따라 다릅니다.
Redsandro

7

동일한 문제가 있고 homebrew 를 통해 npm을 설치 한 Mac 사용자 :

brew uninstall npm

그때

brew install npm

osx (10.9.1)에서 나를 위해 일합니다.

편집 : brew updatenpm을 설치 하기 전에 필요할 수 있습니다 . brew upgrade홈 브루를 업데이트 한 후 수행 할 수도 있습니다 . 또한 brew doctor다른 문제가 발생하면 실행 하는 것이 도움이 될 수 있습니다 .


4

빠르고 깨끗한 솔루션 (리눅스 테스트) (2014 년 2 월 27 일 피로 후)


npm 제거

npm rm npm -g

npm 설치 (새 URL은 www.npmjs.org 대신 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

또는로 컬 실행 -L 플래그
에반 코델

이전 curl https://npmjs.org/install.sh명령이 바로 리디렉션되어 원활하게 작동 https://www.npmjs.org/install.sh하는 이유 curl https://www.npmjs.org/install.sh | sh입니다. 작은 padawan에 지금부터 설치해도 괜찮습니다. :)
Igor Parra 2016 년


2

SSL을 끄는 것은 매우 나쁜 생각처럼 보입니다. npm의 블로그 는 더 이상 자체 서명 인증서를 지원하지 않는다고 설명합니다. npm install npm -g그들은를 통해 npm을 업그레이드 할 것을 제안 하지만, 물론 동일한 SELF_SIGNED_CERT_IN_CHAIN ​​오류가 발생했습니다. 그래서 방금 노드를 업데이트하고 노드와 함께 npm을 업데이트했습니다. 정확한 절차는 처음에 노드를 설치 한 방법에 따라 다릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.