[node.js] npm을 사용하는 동안 오류 수신 : ‘오류 : SSL 오류 : SELF_SIGNED_CERT_IN_CHAIN’

우분투에서 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



답변

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

npm config set strict-ssl false

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


답변

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


답변

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

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


답변

npm config set strict-ssl false -g

전 세계적으로 저장하려면


답변

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


답변

이 오류 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 오류


답변

이것을 명령 앞에 두는 것이 효과가있는 것 같습니다 NODE_TLS_REJECT_UNAUTHORIZED=0. 전의:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

노드가 자체 서명 된 인증서를 유효한 것으로 인식하게하는 방법을 알아내는 것이 가장 좋습니다. 위의 엄격한 SSL 제안이 어떤 이유로 든 작동하지 않았습니다. 보안 영향을 이해하고 일시적인 빠른 수정이 필요한 경우 Google에서 오류를 검색하는 동안 임의의 github 문제 에서 찾은 것입니다 .