【问题标题】:npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLYnpm 错误!代码 UNABLE_TO_GET_ISSUER_CERT_LOCALLY
【发布时间】:2018-02-03 16:50:43
【问题描述】:

我正在尝试创建反应应用程序的所有方法。我已经尝试过使用 maven,现在我正在尝试使用 Facebook Incubator 的 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 install aws-sdk 时也无法使用sudo。运行 sudo npm install aws-sdk 对我造成了这个错误。
  • 如果有人在使用其他解决方案之前尝试了npm config set cafile 的一些变体,这可能会导致您的 UNABLE_TO_GET_ISSUER_CERT_LOCALLY 问题。您可以通过手术撤消该设置,或者如果您可能是我并且想要一个干净的开始,只需重命名您的 .npmrc

标签: node.js reactjs npm create-react-app


【解决方案1】:

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

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

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

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

【讨论】:

  • 我也是,只是恢复使用 NPM 存储库的 HTTP 版本(而不是 registry.npmjs.org),因为我的工作代理导致问题(因为它充当 MITM,导致证书验证问题) 有一天我会解决证书问题,但我只需要下载一个包,该死!
  • 对我来说,我这样做了,但是当我运行 npm install aws-sdk 时,我也无法使用 sudo。运行 sudo npm install aws-sdk 对我造成了这个错误。
  • 我在这篇文章中遇到了同样的错误,所以我运行了npm config set strict-ssl falsenpm config set registry http://registry.npmjs.org/ ,但是在运行sudo npm install aws-sdk 时仍然出现错误,但是当我删除了sudo 部分和刚刚运行npm install aws-sdk 它工作。
  • 对我来说,除了npm config set strict-ssl false 的设置不起作用。我觉得这是 node.jsnpm 团队应该研究并记录的事情,如果他们无法解决的话。
  • 投反对票,因为这是一个不安全的未加密通道,您的工作场所不喜欢仅通过 HTTP 拉取库。更好的方法是 Jordan 的回答,它允许您定义包含公司证书的信任库,这意味着您可以通过加密通道安全地提取库。
【解决方案2】:

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

如果您使用的是 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 的检查,但也允许遇到此证书

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

【讨论】:

  • 我在哪里可以找到 Windows 中的 .pem 文件。我在整个硬盘中搜索了 pem 文件,在 Windows\System32 深处发现了几个级别。但它不起作用
  • 完美.. 我们有一个 zscaler 代理。我下载了公共 der 证书,转换为 base64 编码的 crt 并在 dockerfile 中添加了 RUN export NODE_EXTRA_CA_CERTS="
【解决方案3】:

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

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

我忘了我 found a script 对此有帮助,Git(通过 HTTPS 克隆 GitHub 存储库也有同样的问题)和 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 的末尾

这解决了我的问题。

【讨论】:

  • 您可能想要检查您的公司在哪个 ZS 云中配置。基本上,检查 ip.zscaler.com 的云名称并在 URL 中设置它。例如:如果它显示zscalertwo.net,则替换为以下 URL:gateway.zscalertwo.net
【解决方案4】:

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

  • 关闭严格的 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

现在似乎对我来说效果最好的解决方案是使用 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 设置。

【讨论】:

  • 第四个选项很有魅力; process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
  • 在 zscaler 的情况下,第四个选项 (set NODE_TLS_REJECT_UNAUTHORIZED=0) 确实对我有帮助。我在 Electron 的背景下遇到了这个问题。还有一个问题是电子构建 URL,它是一个似乎被阻止或无法正常工作的 git 存储库。这需要修复。
  • 我已经尝试了上面提供的所有答案,除了set NODE_TLS_REJECT_UNAUTHORIZED=0
  • 开启 Zscaler,set NODE_TLS_REJECT_UNAUTHORIZED=0 可以帮助我。
【解决方案5】:

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

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

npm config set strict-ssl=false

【讨论】:

  • 这样做存在固有的风险,如果您是恶意中间人攻击的受害者,则在您下载该软件包时可能会对其进行修改。
  • @AlexKeySmith 你是对的。但是,几率非常低。对于某些人来说,这可能是唯一的选择。告售者
【解决方案6】:

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

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

【讨论】:

  • 我尝试了所有其他选项,但没有任何效果,因为我在企业网络防火墙后面。然而,上面帮助我安装了一个新的反应项目。
【解决方案7】:

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

npm config list

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

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

【讨论】:

    【解决方案8】:

    对我来说,问题是 VPN,我断开了 VPN,“npm i”命令正常运行。

    【讨论】:

      【解决方案9】:

      您的操作系统是什么?在 Ubuntu 上,我可以通过运行修复此错误

      npm config set cafile /etc/ssl/certs/ca-certificates.crt
      

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

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

      【讨论】:

        【解决方案10】:

        很容易解决这个问题。

        错误

        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:
        

        解决方案

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

        npm 配置集注册表 https://type_your_org_repo_fqdn

        其他的

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

        【讨论】:

        • 我升级了我的节点并在 linux 上使用 nvm 我将我的节点版本更改为最新并且一切正常
        【解决方案11】:

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

        【讨论】:

          【解决方案12】:

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

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

          【讨论】:

            猜你喜欢
            • 2017-05-24
            • 1970-01-01
            • 1970-01-01
            • 2022-10-08
            • 2018-01-15
            • 2018-06-02
            • 1970-01-01
            • 1970-01-01
            • 2022-11-11
            相关资源
            最近更新 更多