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.