执行npm安装时出现unable to get local issuer certificate
错误:
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,听起来节点在出现这些问题时要严格得多。
有一个问题已经讨论here讨论了使用ca文件,但这有点超出了我的理解,我不确定该怎么做。
我在公司防火墙后面,但我可以在没有任何限制的情况下在浏览器中访问网址。
有没有人对这个问题有进一步的了解,有什么可能的解决方案?
我想知道在此期间恢复到节点0.12 :(
答案 0 :(得分:45)
试试这个npm config set strict-ssl false
。这是此网址https://github.com/nodejs/node/issues/3742
答案 1 :(得分:10)
这里讨论的问题涉及使用ca文件,但它有点超出我的理解,我不确定该怎么办。
一旦你知道如何,这并不难!对于Windows:
使用Chrome转到根网址NPM抱怨(在您的情况下为https://raw.githubusercontent.com)。 打开开发工具并转到Security->查看证书。检查认证路径并确保您获得顶级证书,如果没有打开那个证书。现在转到“详细信息”并使用“复制到文件...”导出证书。
您需要将其从DER转换为PEM。有几种方法可以做到这一点,但我找到的最简单的方法是使用相关关键字很容易找到的在线工具。
现在,如果您使用自己喜欢的文本编辑器打开密钥,则应该看到
-----BEGIN CERTIFICATE-----
yourkey
-----END CERTIFICATE-----
这是您需要的格式。您可以根据需要为多个键执行此操作,并将它们全部合并到一个文件中。我必须在我的情况下做github和npm注册表项。
现在只需编辑.npmrc指向包含密钥的文件,如此
cafile=C:\workspace\rootCerts.crt
我个人认为,这与我们的公司代理相比,与strict-ssl选项相比,表现明显更好。 YMMV。
答案 2 :(得分:9)
可以使用~/.typingsrc
配置文件配置类型。 (~
表示您的主目录)
在github上发现此问题后:https://github.com/typings/typings/issues/120,我可以通过创建~/.typingsrc
并设置此配置来解决此问题:
{
"proxy": "http://<server>:<port>",
"rejectUnauthorized": false
}
它似乎也可以在没有proxy
设置的情况下工作,所以也许它可以从某个地方的环境中选择它。
这不是一个真正的解决方案,但足以让typings
忽略公司防火墙问题,以便我可以继续工作。我确信那里有更好的解决方案。
答案 3 :(得分:7)
这对我有用:
export NODE_TLS_REJECT_UNAUTHORIZED=0
答案 4 :(得分:4)
如果您使用的是公司计算机,则它可能具有自定义证书(注意上面的复数)。花了一段时间才弄明白,但我一直在使用这个小脚本来获取所有内容并配置 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 运行它。我注意到一些公司证书每隔一段时间就会轮换一次。只需重新运行 setup-certs
即可解决所有问题。
您会注意到大多数答案都建议将 strict-ssl
设置为 false
。请不要那样做。而是使用 setup-certs
解决方案来使用实际证书。
答案 5 :(得分:3)
只需在命令提示符下放在注释的下方即可。
其100%成功解决
-npm config set strict-ssl false
答案 6 :(得分:2)
当“ npm install”试图使用自签名或无效证书从HTTPS服务器获取软件包时,任何人都会收到此错误。
快速且不安全的解决方案:
npm config set strict-ssl false
为什么此解决方案不安全? 上面的命令告诉npm从服务器连接并获取模块,即使服务器没有有效的证书并且服务器身份也没有得到验证。因此,如果在npm客户端和实际服务器之间存在代理服务器,则它为入侵者提供了中级攻击机会。
安全的解决方案:
如果package.json中的任何模块托管在具有自签名CA证书的服务器上,则npm无法使用可用的系统CA证书来识别该服务器。 因此,您需要使用.npmrc中的显式配置提供用于服务器验证的CA证书。 在.npmrc中,您需要提供cafile,请参考有关cafile配置here
的更多详细信息cafile=./ca-certs.pem
在ca-certs文件中,您可以添加识别服务器所需的任意数量的CA证书(公共)。证书应采用“ Base-64编码的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权威证书包,则可以从here获取。
出现此错误的另一种情况:
如果您在package.json中提到Git URL作为依赖项,并且git在无效/自签名证书上,那么npm也会引发类似错误。 您可以使用git client的以下配置对其进行修复
git config --global http.sslVerify false
答案 7 :(得分:2)
如果您使用 yarn
:
yarn config set strict-ssl false
答案 8 :(得分:1)
免责声明:此解决方案不太安全,不好做,不要这样做。
我有一个重复的错误消息 - 我在企业VPN /防火墙后面。我能够通过将.typingsrc文件添加到我的用户目录(Windows中的C:\Users\MyUserName\.typingsrc
)来解决此问题。当然,无论何时你绕过SSL,都应该与你的系统管理员交换以解决证书问题。
将注册表网址从 https 更改为 http ,如上面nfiles' answser所示,将 rejectUnauthorized 设置为假
.typingsrc (放在项目目录或用户根目录中)
{
"rejectUnauthorized": false,
"registryURL": "http://api.typings.org/"
}
可选择添加你的github令牌(在我添加之前我没有找到成功。)
{
"rejectUnauthorized": false,
"registryURL": "http://api.typings.org/",
"githubToken": "YourGitHubToken"
}
设置github令牌的说明
答案 9 :(得分:1)
这不是一个正确的答案,但是可以考虑作为一种快速的解决方法。正确的答案是关闭严格的SSL。
我有同样的错误
在PATH上找不到PhantomJS
正在下载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-windows.zip
接收中...
提出请求时出错。
错误:无法获取本地发行者证书
在TLSSocket。 (_tls_wrap.js:1105:38)
在emitNone(events.js:106:13)
在TLSSocket.emit(events.js:208:7)
在TLSSocket._finishInit(_tls_wrap.js:639:8)
在TLSWrap.ssl.onhandshakedone(_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
答案 10 :(得分:1)
我的问题是我的公司代理妨碍了我。这里的解决方案是识别我们代理的根 CA/证书链,(在 mac 上)以 .pem 格式从钥匙串中导出它,然后导出一个变量供节点使用。
export NODE_EXTRA_CA_CERTS=/path/to/your/CA/cert.pem
答案 11 :(得分:0)
添加:
process.env["NODE_TLS_REJECT_UNAUTHORIZED"]
来源:Ignore invalid self-signed ssl certificate in node.js with https.request?
答案 12 :(得分:0)
我遇到了同样的问题。此命令对我也不起作用:
npm config set strict-ssl false
深入研究后,我发现此链接被我们的IT管理员阻止了。
http://registry.npmjs.org/npm
因此,如果您遇到相同的问题,请确保您的浏览器首先可以访问此链接。
答案 13 :(得分:0)
此问题有不同的原因,解决方法因情况而异。此处列出了一些变通方法(注意:这是不安全的变通方法,因此请在尝试之前检查您的组织政策)。
第 1 步:测试并确保互联网在带有命令提示符的机器上正常工作,并且可以直接访问相同的 url,但 NPM 会失败。有很多工具可以做到这一点,例如 curl、wget 等。如果您使用的是 windows,请尝试使用 telnet 或 curl for windows。
第 2 步:使用以下命令将严格的 ssl 设置为 false
npm -g config set strict-ssl false
第 3 步:使用以下命令将拒绝未经授权的 TLS 设置为 no:
export NODE_TLS_REJECT_UNAUTHORIZED=0
如果是 windows(或者可以使用 screen 来设置环境变量):
set NODE_TLS_REJECT_UNAUTHORIZED=0
第 4 步:在安装命令中添加不安全参数,例如
npm i -g abc-package@1.0 --unsafe-perm true
答案 14 :(得分:-1)
set NODE_TLS_REJECT_UNAUTHORIZED=0