错误!代码 UNABLE_TO_GET_ISSUER_CERT_LOCALLY

npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY

我正在尝试所有创建 React 应用程序的方法。我尝试过使用 maven,现在我正在尝试使用来自 Facebook Incubators 的 crate-react-app 构建系统。

当我尝试在 npm 环境中 运行 命令 create-react-app my-app 时,它在我的个人系统上运行没有任何问题。但是当我在我的工作环境中尝试相同的命令时,我在命令提示符下遇到了这个错误

npm ERR! node v6.10.2
npm ERR! npm  v3.10.10
npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY

npm ERR! unable to get local issuer certificate
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

互联网搜索的一个快速解决方案是 npm config set strict-ssl false,幸运的是它有效。但作为我工作环境的一部分,我只能将 strict-ssl 标志设置为 false。

后来我找到了一个安全有效的解决方案,

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

这非常有效,我收到了一条成功消息 Happy Hacking!,因为我没有将 strict-ssl 标志设置为 false。

将 NPM 存储库 URL 更改为 HTTP 可以快速修复,但我想使用 HTTPS。

就我而言,我雇主 (ZScaler) 的代理导致了问题(因为它充当 MITM,导致认证验证问题)

我忘记了 found a script that helps with this and Git (for cloning GitHub repos via HTTPS had the same issue) and forked it for my use

基本上,它为 git 执行以下操作:

git config --global http.proxy http://gateway.zscaler.net:80/
git config --system http.proxy http://gateway.zscaler.net:80/

对于 Node,它将 proxy=http://gateway.zscaler.net:80/ 添加到 c:\Users$USERNAME\npm\.npmrc

的末尾

这解决了我的问题。

可能发生的情况是您的公司解密某些流量并re-encrypts使用他们的证书(您可能已经在钥匙串或受信任的根证书中)

如果您使用的是 node 7 或更高版本,我发现此修复与 node 和 node-gyp 兼容(对于 Windows,您需要以不同的方式执行此操作,但基本上只需要添加这个环境变量):

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem"(在 Windows 中您可能需要删除引号)

pem 文件可以有多个证书:https://nodejs.org/api/cli.html#node_extra_ca_certsfile

确保您的证书采用正确的 pem 格式(您需要真正的换行符而不是文字 \n

我似乎无法使用相对路径(.~

此修复基本上告诉 npm 和 node-gyp 使用常规 CA 的检查,但在遇到此证书时也允许它

理想情况下,您可以使用系统的可信证书,但不幸的是,情况并非如此。

有同样的错误。看起来它与 SSL 证书有关。如果您将 NPM 用于 public 包(不需要 HTTPS 的安全性),您可以使用以下命令关闭严格的 SSL 密钥验证。

如果您只想一次性安装几个 public 可用的软件包,这可能是最简单的解决方法。

npm config set strict-ssl=false

我在尝试更新 npm 时遇到此错误,但在 AWS Linux 中从 yum 安装了一个非常旧的版本(1.3.6!)。我能够手动安装更新的 npm 版本并且一切都已修复。

在尝试了我能找到的所有解决方案后:

  • 关闭严格 ssl:npm config set strict-ssl=false
  • 将注册表更改为 http 而不是 https:npm config set registry http://registry.npmjs.org/
  • 正在更改我的 cafile 设置:npm config set cafile /path/to/your/cert.pem
  • 停止拒绝未知的 CA:set NODE_TLS_REJECT_UNAUTHORIZED=0

现在看来最适合我的解决方案是使用扩展现有 CA 的 NODE_EXTRA_CA_CERTS 环境变量,而不是用 .npmrc 文件中的 cafile 选项替换它们。您可以通过在终端中输入以下内容来设置它:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

当然,每次都设置这个变量会很烦人,所以我将它添加到我的 bash 配置文件中,这样每次我打开终端时都会设置它。如果您还没有 ~/.bash_profile 文件,请创建一个。然后在该文件的末尾添加 export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem。然后,删除 .npmrc 中的 cafile 设置。

就我而言,有时我将我的全局配置设置为使用专为项目设计的证书。

npm config list

/path/to/global/.npmrc
NODE_EXTRA_CA_CERTS = "./certs/chain.pem"

我打开了文件,删除了该行,然后npm install又开始工作了。

对我来说问题是 VPN,我断开了 VPN 并且“npm i”命令没有失败。

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

如果此代码技巧对您不起作用,那么尝试从主目录运行您的应用程序。。它对我有用。

你的 OS 是什么?在 Ubuntu 我能够通过 运行

修复这个错误
npm config set cafile /etc/ssl/certs/ca-certificates.crt

告诉 npm 使用我系统的证书存储。 Debian 使用相同的系统证书路径,我对其他发行版和 OSes.

不太熟悉

(我不喜欢其他所有关闭证书验证并允许中间人攻击的答案。)

很容易解决这个问题。

错误

npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY 
npm ERR! errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY
npm ERR! request to https://registry.npmjs.org/yarn failed, reason: unable to get local issuer certificate  
npm ERR! A complete log of this run can be found in:

解决方案

如果您在组织或内部网中,请使用以下推荐。

npm config set registry https://type_your_org_repo_fqdn

其他

npm 配置设置注册表 http://registry.npmjs.org/

一些原理图在引擎盖下使用纱线并抛出相同的错误。

yarn config set registry http://registry.npmjs.org

Zscalar 更新策略 帮助我进行网络调用,在尝试了上述的一些解决方法之后。

在 Zscalar 更新之前尝试过的解决方法:

Zscalar 应用程序中的更新政策(以黄色突出显示)帮助我解决了“无法获取本地颁发者证书”的问题。

这对我有用(在 Mac 10.15.7 上)。

我的问题是我试过这个命令...

npm install eslint --save-dev

...并收到此错误消息...

npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY
npm ERR! errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY
npm ERR! request to https://registry.npmjs.org/eslint failed, reason: unable to get local issuer certificate

...我用谷歌搜索了一条错误消息,最后找到了您正在阅读的堆栈溢出问题。

然后我尝试了上面的建议之一,即

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

...然后,我又试了...

npm install eslint --save-dev

...并收到相同的错误消息。

然后我做了一些独特的事情。我连接到我公司的 vpn。(这与某人(即@mask)建议的相反。他们说他们关闭了他们的 vpn!)

我试过了...

npm install eslint --save-dev

...第三次,效果非常好。问题解决了。 (-:

(旁白:我想知道我是否第一次尝试解决这个问题,即

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

...有必要吗?)

执行以下步骤为我解决了问题。

npm config set strict-ssl=false
npm config set registry http://registry.npmjs.org/
npm config set cafile /path/to/your/cert.pem
set NODE_TLS_REJECT_UNAUTHORIZED=0