min*_*rse 32 ssl node.js npm npm-install
我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
Run Code Online (Sandbox Code Playgroud)
我最近从更早的版本更新到节点4,并且当出现这些问题时,听起来节点要严格得多.
有讨论的问题在这里它谈论使用CA文件,但它是一个有点超出我的理解,我不清楚该怎么办才好.
我在公司防火墙后面,但我可以在没有任何限制的情况下在浏览器中获得网址.
有没有人对此问题有任何进一步的了解以及有哪些可能的解决方案?
我想知道在此期间恢复到节点0.12 :(
小智 64
试试这个npm config set strict-ssl false
.这是此网址https://github.com/nodejs/node/issues/3742中共享的替代方案
Tim*_*m L 17
这里讨论的问题涉及使用ca文件,但它有点超出我的理解,我不确定如何处理它.
一旦你知道如何,这并不难!对于Windows:
使用Chrome转到根网址NPM抱怨(所以https://raw.githubusercontent.com在你的情况下).打开开发工具并转到Security-> View Certificate.检查认证路径并确保您获得顶级证书,如果没有打开那个证书.现在转到"详细信息"并使用"复制到文件..."导出证书.
您需要将其从DER转换为PEM.有几种方法可以做到这一点,但我找到的最简单的方法是使用相关关键字很容易找到的在线工具.
现在,如果您使用自己喜欢的文本编辑器打开密钥,您应该看到
-----BEGIN CERTIFICATE-----
yourkey
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
这是您需要的格式.您可以根据需要为多个键执行此操作,并将它们全部合并到一个文件中.我必须在我的情况下做github和npm注册表项.
现在只需编辑你的.npmrc指向包含你的密钥的文件就像这样
cafile=C:\workspace\rootCerts.crt
Run Code Online (Sandbox Code Playgroud)
我个人认为这比我们的公司代理更好地执行,而不是strict-ssl选项.因人而异.
Ken*_*Ken 15
这对我有用:
export NODE_TLS_REJECT_UNAUTHORIZED=0
Run Code Online (Sandbox Code Playgroud)
有关用法和警告,请参阅 NodeJS 文档:https : //nodejs.org/api/cli.html#cli_node_tls_reject_unauthorized_value
小智 13
可以使用配置~/.typingsrc
文件配置类型.(~
表示您的主目录)
发现在github上这个问题后:https://github.com/typings/typings/issues/120,我能够通过创建解决此问题破解~/.typingsrc
,并设置该配置:
{
"proxy": "http://<server>:<port>",
"rejectUnauthorized": false
}
Run Code Online (Sandbox Code Playgroud)
它似乎也没有proxy
设置工作,所以也许它能够从某个地方的环境中挑选出来.
这不是一个真正的解决方案,但足以typings
忽略企业防火墙问题,以便我可以继续工作.我相信那里有更好的解决方案.
Nil*_*ils 13
当“npm install”尝试从带有自签名或无效证书的 HTTPS 服务器获取包时,任何人都会收到此错误。
快速且不安全的解决方案:
npm config set strict-ssl false
Run Code Online (Sandbox Code Playgroud)
为什么这个解决方案不安全?上面的命令告诉 npm 连接并从服务器获取模块,即使服务器没有有效的证书并且服务器身份未被验证。因此,如果 npm 客户端和实际服务器之间存在代理服务器,则它为入侵者提供了中间人攻击机会。
安全解决方案:
如果 package.json 中的任何模块托管在具有自签名 CA 证书的服务器上,则 npm 无法使用可用的系统 CA 证书识别该服务器。因此,您需要使用 .npmrc 中的显式配置为服务器验证提供 CA 证书。在 .npmrc 中需要提供 cafile,详细请参考cafile 配置。
cafile=./ca-certs.pem
Run Code Online (Sandbox Code Playgroud)
在 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-----
Run Code Online (Sandbox Code Playgroud)
注意:一旦您在 .npmrc 中提供 cafile 配置,npm 会尝试仅使用 cafile 中提供的 CA 证书来识别所有服务器,然后它不会检查系统 CA 证书包。这是一个著名的公共 CA 机构证书包。
出现此错误时的另一种情况:
如果您在 package.json 中提到 Git URL 作为依赖项,并且 git 在无效/自签名证书上,那么 npm 也会抛出类似的错误。您可以使用 git 客户端的以下配置来修复它
git config --global http.sslVerify false
Run Code Online (Sandbox Code Playgroud)
Eri*_*rik 10
我的问题是我的公司代理妨碍了我。这里的解决方案是识别我们代理的根 CA/证书链,(在 Mac 上)将其从钥匙串中以 .pem 格式导出,然后导出一个变量供节点使用。
export NODE_EXTRA_CA_CERTS=/path/to/your/CA/cert.pem
Run Code Online (Sandbox Code Playgroud)
对于从 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
Run Code Online (Sandbox Code Playgroud)
小智 7
此问题有不同的原因,解决方法也根据具体情况而有所不同。此处列出了一些解决方法(注意:这是不安全的解决方法,因此请在尝试之前检查您的组织策略)。
第 1 步:使用命令提示符测试并确保计算机上的互联网正常工作,并且可以直接访问相同的 url,但 NPM 会失败。有很多工具可以实现此目的,例如curl、wget 等。如果您使用的是Windows,请尝试用于Windows 的telnet 或curl。
步骤 2:使用以下命令将 strict ssl 设置为 false
npm -g config set strict-ssl false
步骤 3:使用以下命令将拒绝未经授权的 TLS 设置为否:
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
获得证书(cer 或 pem 文件)后,将其添加为系统变量,如下面的屏幕截图所示。
这是解决问题的安全方法,而不是禁用 SSL。在使用环境变量建立 SSL 连接时,您必须告诉 npm 或您正在使用的任何节点工具使用这些证书NODE_EXTRA_CA_CERTS
。
当您位于公司防火墙或代理后面时,这种情况很常见。您只需在使用公司的 VPN 或代理访问页面时检查 Chrome 中的安全选项卡,然后通过 Windows 中的“管理计算机证书”窗口导出证书,即可找到正确的证书。
小智 6
只需使用命令提示符放置在注释下方。
其100%成功解决
-npm config set strict-ssl false
Run Code Online (Sandbox Code Playgroud)
添加:
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
Run Code Online (Sandbox Code Playgroud)
来源:使用 https.request 忽略 node.js 中无效的自签名 ssl 证书?
如果您使用的是公司计算机,则它可能具有自定义证书(注意上面的复数)。花了一段时间才弄明白,但我一直在使用这个小脚本来获取所有内容并配置 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
Run Code Online (Sandbox Code Playgroud)
然后,您可以随时setup-certs
在终端中运行。请注意,如果您使用 Nvm 来管理 Node 版本,则需要为每个版本的 Node 运行它。我注意到一些公司证书每隔一段时间就会轮换一次。只需重新运行即可setup-certs
解决所有这些问题。
您会注意到大多数答案都建议设置strict-ssl
为false
. 请不要那样做。而是使用setup-certs
解决方案来使用实际证书。
归档时间: |
|
查看次数: |
56759 次 |
最近记录: |