npm ERR!代码UNABLE_TO_GET_ISSUER_CERT_LOCALLY

我正在尝试创建反应应用程序的所有方法。我已经尝试过使用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>
神乐前端2020/03/12 15:49:11

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

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

Gil伽罗小宇宙2020/03/12 15:49:11

下面的代码非常适合我,这里使http只代替https

npm config set registry http://registry.npmjs.org/  
神奇Davaid2020/03/12 15:49:11

相信我,这将为您工作:

    npm config set registry http://registry.npmjs.org/  
JinJinDavaid卡卡西2020/03/12 15:49:11

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

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

npm config set strict-ssl=false
凯神无2020/03/12 15:49:11

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

Harry逆天Eva2020/03/12 15:49:10

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

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

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

达蒙西门2020/03/12 15:49: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

那为我解决了这个问题。

小宇宙Pro2020/03/12 15:49:10

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

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

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

这工作得很好,并且我Happy Hacking!没有将strict-ssl标志设置为false,从而获得了成功消息