错误的ERR!代码UNABLE_TO_GET_ISSUER_CERT_LOCALLY

Din*_*esh 77 node.js npm reactjs create-react-app

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

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

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>
Run Code Online (Sandbox Code Playgroud)

Din*_*esh 213

我搜索了互联网,并尝试了所有选项.但解决方案没有运气.最后我遇到了npm config set strict-ssl false,幸运的是它奏效了.但这不是正确的方法,因为我在我的工作环境中,我应该被限制为将ssl标志设置为false.

后来我找到了一个安全可行的解决方案.

npm config set registry http://registry.npmjs.org/  
Run Code Online (Sandbox Code Playgroud)

这工作得很好,我Happy Hacking!通过不设置任何ssl标志false 得到了成功消息.

  • 是否有官方的 StackExchange 标志“从技术上回答了问题,但这是一个糟糕的主意”?我们这里确实需要这个。你想要供应链攻击吗?因为这就是供应链受到攻击的方式。 (7认同)
  • 我遇到了这篇文章中显示的相同错误,因此我运行了“npm config set strict-ssl false”和“npm config setregistry http://registry.npmjs.org/”,但在运行“sudo”时仍然遇到错误npm install aws-sdk` 但是当我删除 `sudo` 部分并只运行 `npm install aws-sdk` 时它就起作用了。 (3认同)
  • 否决,因为这是一个不安全的未加密通道,并且您的工作场所不喜欢仅通过 HTTP 拉取库。更好的方法是乔丹的答案,它允许您定义包含公司证书的信任存储,这意味着您可以通过加密通道安全地提取库。 (3认同)
  • 我也只是恢复使用 NPM 存储库的 HTTP 版本(而不是 https://registry.npmjs.org/),因为我的工作代理导致了问题(因为它充当 MITM,导致认证验证问题)总有一天我会弄清楚证书问题,但我只需要下载一个包,该死! (2认同)

Rya*_*Day 17

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

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

现在似乎对我来说效果最好的解决方案是使用NODE_EXTRA_CA_CERTS环境变量来扩展现有的 CA,而不是用 .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 设置。


Jor*_*dan 12

可能发生的事情是你的工作解密某些流量并用他们的证书(你可能已经在你的钥匙串或受信任的根证书中)重新加密它

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

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem"

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

确保你的证书是正确的pem格式(你需要真正的换行符不是文字\n)

我似乎无法使用它.~路径

这个修复程序基本上告诉npm和node-gyp对常规CA使用检查,但是当它遇到它时也允许这个证书

理想情况下,您可以使用系统的可信证书,但遗憾的是情况并非如此.

  • 在 Windows 中哪里可以找到 .pem 文件。我在整个硬盘中搜索了 pem 文件,发现 Windows\System32 深处有几个级别。但这不起作用 (10认同)
  • 完美..我们有一个 zscaler 代理。我下载了公共der证书,转换为base64编码的crt,并在dockerfile中添加了RUN导出NODE_EXTRA_CA_CERTS =“&lt;证书路径&gt;” (7认同)
  • 这是最佳实践,几乎所有其他答案都可能非常危险,因为这些较差的答案允许 MITM 攻击。 (3认同)
  • 谢谢!我也有Zscaler。我在我的计算机上本地找到了证书,并按照[本指南](https://community.tenable.com/s/article/How-to-export-certificate-in-PEM-format-for-import-来自 Windows)。 (3认同)
  • 由于 BlueCoat,我遇到了这个问题,我必须每隔几个月参考一下您的答案。绝对是比禁用严格 SSL 更好的解决方案 — 谢谢! (2认同)
  • 为了针对 mac/os x homebrew 用户扩展此功能,它将类似于“export NODE_EXTRA_CA_CERTS=/System/Volumes/Data/opt/homebrew/etc/ca-certificates/cert.pem”(通过“find /System/Volumes”找到) /Data/opt/homebrew -name "*.pem"`)。 (2认同)

Mar*_*nas 12

你的操作系统是什么?在 Ubuntu 上我可以通过运行来修复这个错误

npm config set cafile /etc/ssl/certs/ca-certificates.crt
Run Code Online (Sandbox Code Playgroud)

告诉 npm 使用我系统的证书存储。Debian 使用相同的系统证书路径,我对其他发行版和操作系统不太熟悉。

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


小智 8

在尝试了上述的几个解决方案后, Zscalar更新策略帮助我进行网络调用。

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

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

打开 Zscalar 应用程序 -> 单击


小智 7

相信我,这对你有用:

    npm config set registry http://registry.npmjs.org/  
Run Code Online (Sandbox Code Playgroud)


joe*_*els 6

就我而言,在某些时候我将全局配置设置为使用适用于项目的证书。

npm config list

/path/to/global/.npmrc
NODE_EXTRA_CA_CERTS = "./certs/chain.pem"
Run Code Online (Sandbox Code Playgroud)

我打开文件,删除该行并npm install再次工作。


mas*_*ask 6

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


小智 6

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

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


Rob*_*don 5

将NPM存储库URL更改为HTTP可以快速解决问题,但是我想使用HTTPS。

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

我忘了我找到了一个与此脚本和Git一起使用的脚本(用于通过HTTPS克隆GitHub存储库存在相同的问题),并将其分叉供我使用

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

git config --global http.proxy http://gateway.zscaler.net:80/
git config --system http.proxy http://gateway.zscaler.net:80/
Run Code Online (Sandbox Code Playgroud)

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

那为我解决了这个问题。

  • 您可能想检查您的公司配置在哪个 ZS 云中。基本上,检查“ip.zscaler.com”中的云名称并在 URL 中进行设置。例如:如果显示“zscalertwo.net”,则替换为以下 URL:“gateway.zscalertwo.net” (2认同)

Jas*_*ger 5

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

如果您只想一次性安装一些公开可用的软件包,这可能是最简单的修复方法。

npm config set strict-ssl=false
Run Code Online (Sandbox Code Playgroud)

  • 这样做存在固有的风险,如果您是恶意中间人攻击的受害者,则在您下载软件包时可能会修改该软件包。 (5认同)
  • @AlexKeySmith你是对的。然而,这种可能性非常低。对于某些人来说,这可能是唯一的选择。买者自负 (2认同)