우분투에서 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
호스트를 신뢰하는 경우 체인에서 자체 서명 된 인증서를 내보내고 시스템으로 가져 와서 신뢰할 수있는 것으로 표시 할 수 있습니다.
이는 다음을 통해 인증서를 확인하여 달성 할 수 있습니다 ( example.com
npm 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/yourCerts.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 문제 에서 찾은 것입니다 .