npm ERR!代码UNABLE_TO_GET_ISSUER_CERT_LOCALLY


117

我正在尝试创建反应应用程序的所有方法。我已经尝试过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>

1
我也不能使用sudo,当我跑npm install aws-sdk。运行sudo npm install aws-sdk对我造成了此错误。
凯尔·布​​莱恩汀汀

Answers:


296

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

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

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

这工作得很好,并且Happy Hacking!没有将strict-ssl标志设置为false ,因此我收到了成功消息。


2
我也只是恢复为使用NPM存储库的HTTP版本(而不是Registry.npmjs.org),因为我的工作代理引起了问题(因为它作为MITM起作用,导致了证书验证问题),有一天我会发现出了证书问题,但是我只需要下载一个程序包,就可以了!
罗伯特·邓登

1
我以为,我已经有了这个设置,但是当仔细看时,我使用的是https而不是http(Registry.npmjs.org)。更改为http并成功。
Ashish Bajpai

对我来说我做到了,但是sudo跑步时我也没用npm install aws-sdk。运行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.js,如果npm团队无法解决问题,团队应该调查并采取适当的措施进行记录。
RinoTom

23

可能发生的情况是您的公司解密了某些流量,并使用其证书(您可能已经在钥匙串或受信任的根证书中使用了它们的证书)对其进行了加密。

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

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem" (在Windows中,您可能需要删除引号-参见注释)

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

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

我似乎无法使其与相对路径(.~)一起使用

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

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


大。投票赞成您的详细解释。帮助我更好地理解。很好的信息。
维苏

2
在Windows中,除非删除引号,否则该路径不起作用。
克里斯·安德森

1
由于BlueCoat,我遇到了这个问题,每隔几个月就要参考一次您的回答。绝对比禁用严格的SSL更好的解决方案-谢谢!
约旦·格雷

在Windows哪里可以找到.pem文件。我在整个硬盘中搜索了pem文件,该文件在Windows \ System32的深层中很少找到。但这是行不通的
Sanchit Jain

10

将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/

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

那为我解决了这个问题。


2
您可能要检查配置公司的ZS云。基本上,检查ip.zscaler.com云名称并将其设置在URL中。例如:如果显示,zscalertwo.net则替换为以下URL:gateway.zscalertwo.net
Rahul Bharadwaj

6

在尝试了所有解决方案之后,我可以找到:

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

5

相信我,这将为您工作:

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

尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。请查阅“ 如何回答”以阅读有关如何回答问题的更多信息
Artog

4

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

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

npm config set strict-ssl=false

5
这样做有其固有的风险,如果您是邪恶的中间人攻击的受害者,则可以在下载软件包时对其进行修改。
亚历克斯·KeySmith

@AlexKeySmith你是对的。但是,赔率很低。对于某些人来说,这可能是唯一的选择。告诫Emptor
Jason Geiger,

1

尝试更新npm时出现此错误,但是在AWS Linux中从yum安装了一个非常老的版本(1.3.6!)。我能够手动安装较新的npm版本,并且一切都已得到纠正。



0

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

npm config list

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

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


0

出现以下错误

PS C:\ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm install vue npm ERR!代码UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR!errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm错误!对https://registry.npmjs.org/vue的请求 失败,原因:无法获取本地发行者证书

npm ERR!可以在以下位置找到此运行的完整日志:npm ERR!
C:\ Users \ chpr \ AppData \ Roaming \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log PS C:\ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> PS C:\ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm ERR!
C:\ Users \ chpr \ AppData \ Roaming \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log

下面的命令解决了这个问题:

npm config set strict-ssl false
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.