npm 설치 오류 - 로컬 발급자 인증서를 가져올 수 없습니다.
는 를 있습니다.unable to get local issuer certificate
할 때 발생 npm생:
typings ERR! message Unable to read typings for "es6-shim". You should check the
entry paths in "es6-shim.d.ts" are up to date
typings ERR! caused by Unable to connect to "https://raw.githubusercontent.com/D
efinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/es6-shim
/es6-shim.d.ts"
typings ERR! caused by unable to get local issuer certificate
저는 최근에 훨씬 이전 버전에서 노드 4로 업데이트했는데 이러한 문제가 발생하면 노드가 훨씬 더 엄격한 것으로 들립니다.
여기서 ca 파일을 사용하는 것에 대해 이야기하는 문제가 있습니다만, 제가 이해할 수 없는 부분이고 어떻게 해야 할지 잘 모르겠습니다.
저는 회사 방화벽 뒤에 있지만 브라우저에서 아무런 제한 없이 url fine으로 이동할 수 있습니다.
이 문제와 가능한 해결책에 대해 더 많은 통찰력을 가진 사람이 있습니까?
그 동안 노드 0.12로 되돌리는 것에 대해 궁금합니다 :(
해라
npm config set strict-ssl false
이 URL https://github.com/nodejs/node/issues/3742 에 공유된 대안입니다.
여기서 ca 파일을 사용하는 것에 대해 이야기하는 문제가 있습니다만, 제가 이해할 수 없는 부분이고 어떻게 해야 할지 잘 모르겠습니다.
방법만 알면 어렵지 않아요!Windows의 경우:
Chrome을 사용하면 NPM이 불만을 제기하는 루트 URL로 이동합니다(따라서 당신의 경우에는 https://raw.githubusercontent.com .개발 도구를 열고 보안-> 인증서 보기로 이동합니다.인증 경로를 확인하고 최상위 인증서가 열리지 않는 경우 최상위 인증서인지 확인합니다.이제 "Details(세부사항)"로 이동하여 "Copy to File(파일에 복사)"과 함께 인증서를 내보냅니다..".
이것을 DER에서 PEM으로 변환해야 합니다.몇 가지 방법이 있지만 가장 쉽게 찾은 방법은 관련 키워드로 쉽게 찾을 수 있는 온라인 도구였습니다.
이제 좋아하는 텍스트 편집기로 키를 연다면 다음과 같이 표시됩니다.
-----BEGIN CERTIFICATE-----
yourkey
-----END CERTIFICATE-----
이것이 당신이 필요로 하는 서식입니다.필요한 만큼의 키에 대해 이 작업을 수행하고 모든 키를 하나의 파일로 결합할 수 있습니다.저는 github과 npm 레지스트리 키를 제 경우에 해야 했습니다.
이제 당신의 .npmrc를 수정해서 당신의 키가 들어있는 파일을 가리킵니다.
cafile=C:\workspace\rootCerts.crt
저는 개인적으로 이것이 엄격한 ssl 옵션에 비해 당사의 대리인이 훨씬 더 나은 성능을 발휘한다는 것을 알게 되었습니다.YMMV.
효과가 있었습니다.
export NODE_TLS_REJECT_UNAUTHORIZED=0
노드를 참조하십시오.사용 및 경고에 대한 JS 설명서: https://nodejs.org/api/cli.html#cli_node_tls_reject_unauthorized_value
'npm install'이 자체 서명되었거나 잘못된 인증서로 HTTPS 서버에서 패키지를 가져오려고 할 때 누구나 이 오류가 발생합니다.
신속하고 안전하지 않은 솔루션:
npm config set strict-ssl false
이 솔루션이 안전하지 않은 이유는 무엇입니까?위 명령어는 npm에게 서버가 유효한 인증서를 가지고 있지 않고 서버 ID가 확인되지 않더라도 서버에서 모듈을 연결하여 가져오라고 지시합니다.따라서 npm 클라이언트와 실제 서버 사이에 프록시 서버가 존재하는 경우 침입자에게 중간 공격 기회를 제공했습니다.
안전한 솔루션:
패키지에 모듈이 있는 경우.json은 자체 서명된 CA 인증서를 가진 서버에서 호스팅되고 npm은 사용 가능한 시스템 CA 인증서를 가진 해당 서버를 식별할 수 없습니다.따라서 .npmrc의 명시적 구성으로 서버 검증을 위한 CA 인증서를 제공해야 합니다..npmrc에서 cafile을 제공해야 하므로 cafile 구성에 대한 자세한 내용을 참조하시기 바랍니다.
cafile=./ca-certs.pem
ca-certs 파일에서 서버를 식별하는 데 필요한 CA 인증서(공용) 수를 추가할 수 있습니다.인증서는 "Base-64 encoded X.509(.)"에 있어야 합니다.CER)(PEM)" 형식.
예를들면,
# cat ca-certs.pem
DigiCert Global Root CA
=======================
-----BEGIN CERTIFICATE-----
CAUw7C29C79Fv1C5qfPrmAE.....
-----END CERTIFICATE-----
VeriSign Class 3 Public Primary Certification Authority - G5
========================================
-----BEGIN CERTIFICATE-----
MIIE0zCCA7ugAwIBAgIQ......
-----END CERTIFICATE-----
참고: .npmrc에서 cafile 구성을 제공하면 npm이 cafile에서만 제공되는 CA 인증서를 사용하여 모든 서버를 식별하려고 하면 시스템 CA 인증서 번들을 확인하지 않습니다.여기 잘 알려진 공인 CA 권한 인증서 묶음이 있습니다.
이 오류가 발생할 경우 또 하나의 상황:
패키지 종속성으로 Git URL을 언급하셨다면.json 및 git가 잘못된/자체 서명 인증서에 있고 npm도 유사한 오류를 발생시킵니다.git 클라이언트에 대해 다음 구성으로 수정할 수 있습니다.
git config --global http.sslVerify false
회사 컴퓨터의 경우 사용자 지정 인증서를 가지고 있을 가능성이 높습니다.파악하는 데 시간이 좀 걸렸지만 이 작은 스크립트를 사용하여 모든 것을 파악하고 Node, NPM, Yarn, AWS 및 Git를 구성했습니다(솔루션은 대부분의 툴에서 유사함).이것을 당신의 것에 넣습니다.~/.bashrc
아니면~/.zshrc
또는 이와 유사한 위치:
function setup-certs() {
# place to put the combined certs
local cert_path="$HOME/.certs/all.pem"
local cert_dir=$(dirname "${cert_path}")
[[ -d "${cert_dir}" ]] || mkdir -p "${cert_dir}"
# grab all the certs
security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain > "${cert_path}"
security find-certificate -a -p /Library/Keychains/System.keychain >> "${cert_path}"
# configure env vars for commonly used tools
export GIT_SSL_CAINFO="${cert_path}"
export AWS_CA_BUNDLE="${cert_path}"
export NODE_EXTRA_CA_CERTS="${cert_path}"
# add the certs for npm and yarn
# and since we have certs, strict-ssl can be true
npm config set -g cafile "${cert_path}"
npm config set -g strict-ssl true
yarn config set cafile "${cert_path}" -g
yarn config set strict-ssl true -g
}
setup-certs
그러면 언제든지 도망칠 수 있습니다.setup-certs
당신의 터미널에서.Nvm을 사용하여 Node 버전을 관리하는 경우 Node의 각 버전에 대해 이를 실행해야 합니다.저는 어떤 회사의 자격증들이 아주 자주 순환되는 것을 발견했습니다. 다시 gsetup-certs
그 모든 것을 고칩니다.
에서 입니다를 strict-ssl
.false
말아요제발 그러지마.합니다.setup-certs
실제 인증서를 사용할 수 있는 솔루션입니다.
로 할 수 .~/.typingsrc
config일).~
(홈를 의미함)합니다.)
github: https://github.com/typings/typings/issues/120, 에서 이 문제를 발견한 후, 저는 이 문제를 만들어 해킹할 수 있었습니다.~/.typingsrc
다음과 같이 설정합니다.
{
"proxy": "http://<server>:<port>",
"rejectUnauthorized": false
}
그것은 또한 그것 없이도 작동하는 것처럼 보였습니다.proxy
환경을 설정해서 어딘가에 있는 환경에서 그런 걸 얻을 수 있었을 겁니다.
했습니다 했습니다.typings
회사 방화벽 문제를 무시하고 일을 계속할 수 있도록 말입니다.저는 더 나은 해결책이 있다고 확신합니다.
저의 문제는 제 회사 대리인이 방해가 되고 있다는 것이었습니다.여기서 해결책은 프록시의 Root CA/certificate chain을 식별하고 (mac에서) 키체인에서 .pem 형식으로 내보낸 다음 노드에서 사용할 변수를 내보내는 것이었습니다.
export NODE_EXTRA_CA_CERTS=/path/to/your/CA/cert.pem
이 문제는 상황에 따라 해결 방법이 다릅니다.여기에 몇 가지 해결 방법을 나열합니다(참고: 안전하지 않은 해결 방법이므로 시도하기 전에 조직 정책을 확인하십시오).
1단계: 명령 프롬프트를 사용하여 컴퓨터에서 인터넷이 작동하는지 테스트하고 동일한 URL에 직접 액세스할 수 있는지 확인하며 NPM에서 실패합니다.컬, wget 등 여러 가지 도구가 있습니다.윈도우를 사용하는 경우에는 텔넷이나 컬로 윈도우를 만들어 봅니다.
2단계: 아래 명령을 사용하여 엄격한 ssl을 false로 설정합니다.
npm -g config set strict-ssl false
3단계: 아래 명령을 사용하여 reject unauthorized TLS를 no로 설정합니다.
export NODE_TLS_REJECT_UNAUTHORIZED=0
창의 경우(또는 화면을 사용하여 환경 변수를 설정할 수 있음):
set NODE_TLS_REJECT_UNAUTHORIZED=0
4단계: 설치 명령에 안전하지 않은 매개 변수 추가(예:
npm i -g abc-package@1.0 --unsafe-perm true
macOS에서 여기로 오는 모든 사람들:
어찌된 일인지 npm이 정확한 인증서 파일 위치를 선택하지 못했기 때문에 이를 명시적으로 지적해야 했습니다.
$ echo "cafile=$(brew --prefix)/share/ca-certificates/cacert.pem" >> ~/.npmrc
$ cat ~/.npmrc # for ARM macOS
cafile=/opt/homebrew/share/ca-certificates/cacert.pem
인증서(cer 또는 pem 파일)가 있으면 아래 스크린샷과 같이 시스템 변수로 추가합니다.
이것이 SSL을 비활성화하는 것이 아니라 문제를 안전하게 해결하는 방법입니다.하여 SSL때 npm다를 때.NODE_EXTRA_CA_CERTS
.
이는 회사 방화벽이나 프록시 뒤에 있을 때 흔히 발생합니다.회사 VPN이나 프록시에서 페이지를 방문할 때 크롬의 보안 탭을 확인하고 Windows의 "컴퓨터 인증서 관리" 창을 통해 인증서를 내보내는 것만으로 올바른 인증서를 찾을 수 있습니다.
추가:
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
출처: node.js의 잘못된 자체 서명 SSL 인증서를 https.request로 무시하시겠습니까?
.yarn
:
yarn config set strict-ssl false
저도 같은 문제에 봉착했습니다.이 명령은 저에게도 통하지 않았습니다.
npm config set strict-ssl false
더 깊이 파고든 끝에 IT 관리자가 이 링크를 차단했다는 사실을 알게 되었습니다.
http://registry.npmjs.org/npm
따라서 동일한 문제에 직면한 경우, 먼저 브라우저에서 이 링크에 액세스할 수 있는지 확인합니다.
이것은 올바른 대답은 아니지만 빠른 해결책으로 간주할 수 있습니다.정답은 엄격한 SSL을 해제하는 것입니다.
저도 같은 오류가 있습니다.
PATHPATH 에서에서 수 JS를 찾을 수 없습니다.
https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-windows.zip 다운로드 중
C 에 저장:\\Users\Sam\AppData\Local\Temp\phantomjs\phantomjs-2.1.1-window.
받는 중...
요청하는 중 오류가 발생했습니다.
류를(를) 수 .다.
TLSSocket 에서._tls_wrap.js:1105:38)
at emiNone (events.js:106:13)
TLSSocket.emit 에서(events.js:208:7)
TLSSocket 에서._Init (_tls_wrap.js:639:8)
TLSWrap.ssl.onhandshakeedone(_tls_wrap.js:469:38)에서
그래서 오류를 읽은 다음에.
파일을 수동으로 다운로드하여 필요한 경로에 배치했습니다.
C:\Users\Sam\AppData\Local\Temp\phantomjs\
이것으로 문제가 해결되었습니다.
PhantomJS not found on PATH
Download already available at C:\Users\sam\AppData\Local\Temp\phantomjs\phantomjs-2.1.1-windows.zip
Verified checksum of previously downloaded file
Extracting zip contents
면책 사항: 이 솔루션은 안전성이 떨어집니다. 나쁜 관행입니다. 이렇게 하지 마세요.회사 VPN/방화벽 뒤에 있어요.사용자 디렉토리에 .typingrc 파일을 추가하여 이 문제를 해결할 수 있었습니다 (C:\Users\MyUserName\.typingsrc
(창문에서).물론 SSL을 회피할 때마다 시스템 관리자에게 매핑하여 인증서 문제를 해결해야 합니다.
레지스트리 URL을 https에서 http로 변경하고 위의 nfiles의 답변에 있는 것처럼 rejectUnauthorized를 false로 설정합니다.
.typingsrc (프로젝트 디렉터리 또는 사용자 루트 디렉터리에 있음)
{
"rejectUnauthorized": false,
"registryURL": "http://api.typings.org/"
}
선택적으로 github 토큰을 추가합니다. (저도 이를 추가하기 전에는 성공하지 못했습니다.)
{
"rejectUnauthorized": false,
"registryURL": "http://api.typings.org/",
"githubToken": "YourGitHubToken"
}
https://github.com/blog/1509-personal-api-tokens 에서 github 토큰을 설정하는 방법을 참조하십시오.
에서는 FreeB가 에 이 할 수 SD에서는 이 오류가 발생할 수 있습니다.cafile
path됩니다 symlink신 .
ca-certificates 재설치가 저에게 효과적입니다.
# OSX
brew install ca-certificates
언급URL : https://stackoverflow.com/questions/36494336/npm-install-error-unable-to-get-local-issuer-certificate
'programing' 카테고리의 다른 글
여러 플롯을 하나의 PDF 파일에 저장 (0) | 2023.10.06 |
---|---|
오버플로된 Div 내의 요소로 스크롤하려면 어떻게 해야 합니까? (0) | 2023.10.06 |
C/C++의 통사당 (0) | 2023.10.06 |
Angular UI Grid 3.x 버전의 Action 버튼 (0) | 2023.10.06 |
Cython을 Python to C Converter로 사용 (0) | 2023.10.06 |