Git和NPM因使用代理而失败

3

最近我由于某些原因无法使用git将代码上传到github,也无法使用npm来安装node模块。(我的操作系统是Windows 10)

在使用git时,我遇到了以下错误提示:

$ git push origin master fatal: unable to access
'https://github.com/$$$/$$$.git/': SSL certificate problem:
unable to get local issuer certificate

我在使用 npm 时遇到了以下错误:

npm install --save-dev webpack
npm WARN package.json 613@1.0.0 No description
npm WARN package.json 613@1.0.0 No README data
npm ERR! Windows_NT 10.0.14393
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "--save-dev" "webpack"
npm ERR! node v4.4.4
npm ERR! npm  v2.15.1
npm ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE

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

npm ERR! Please include the following file with any support request:
npm ERR!     npm-debug.log

我升级了git到最新版本,但仍然出现同样的错误。我试着运行npm install -g npm来更新npm,但是还是出现同样的错误,所以我无法更新它。
我不理解SSL是如何工作的。据我所知,我没有任何SSL证书,因此我不知道它在找什么。我也不知道为什么现在才成为问题,几周前我还可以顺利使用git和npm。我不知道发生了什么改变……我在这个网站上找到的所有解决方案都是:
  1. 禁用SSL检查,但这听起来不安全
  2. 告诉git我的证书在哪里,我不知道该如何做
对于npm,我尝试了这里的所有方法:Socket.io无法验证第一个证书,但都没有帮助。最后一步导致出现以下结果:
Loading latest certificates from 
https://mxr.mozilla.org/nss/source/lib/ckfw/builtins/certdata.txt?raw=1
undefined
> { [Error: unable to verify the first certificate] code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' }
undefined

我尝试了简单地写require('ssl-root-cas').inject();,但它并没有帮助我解决错误。

我不知道这是否相关,但我正在使用CovenantEyes。一些我查看的网站说代理可能是一个问题,CovenantEyes是一个代理吗?


1
正如您所提到的,代理服务器可以拦截 SSL 流量,并使用一张您的机器视为 github.com 和 npmjs.com 无效的证书将其发送出去。根据他们的网站,CovenantEyes 看起来可能具有这种能力,但我个人并不熟悉它。 - Peter Reid
1个回答

5
我不了解Covenant Eyes,但是从他们网站的快速浏览中可以看出,他们使用代理技术来拦截您的网络流量并进行过滤、评级和阻止。
当使用HTTPS时,客户端和服务器之间的通信是完全加密的,因此代理无法拦截,因为它没有服务器的私有信息。因此,它最多只能进行想要的中间人攻击,这意味着它从服务器请求HTTPS页面,然后在将其呈现给您的浏览器之前使用自己的证书对其进行加密(在这种情况下Git就是一个浏览器,因为它请求HTTP/HTTPS URL并消耗它们)。
CovenantEyes用于加密流量的证书当然不是官方的GitHub证书,因此Git会抱怨无法验证证书。您的浏览器也会这样做,并警告您这是不安全的,直到您告诉它闭嘴(接受证书)。
为了使这个工作起来,您有几种方式,例如:
- 不使用HTTPS URL,而是使用GIT或SSH URL,这样您就没有被干扰的CovenantEyes。 - 如果可能的话,在CovenantEyes中声明github.com作为例外的拦截机制。 - 导入CovenantEyes用于加密内容的证书,并将其添加到受信任证书的列表中。 - 关闭证书验证。
我认为我更喜欢第一种方式,这也是最简单的方法。

这篇文章 https://helpforum.covenanteyes.com/covenanteyes/topics/ssl-connections-are-broken-on-windows-10-covenant-eyes-7-2-0?topic-reply-list%5Bsettings%5D%5Bfilter_by%5D=all&topic-reply-list%5Bsettings%5D%5Breply_id%5D=18592011#reply_18592011 是在提到选项3吗?我不知道你所说的选项1是什么。CovenantEyes将证书添加到受信任的证书列表中,所以我不知道我缺少了什么。 - robev
从你的描述来看,这应该一直是个问题,但我已经安装了 CovenantEyes 多年,并且一直使用 git 和 npm,直到现在都没有问题。他们最新版本的发布说明中说:“添加了外部 CA 证书支持”。 - robev
是的,这是关于第三点的。阅读第一点请访问 https://help.github.com/articles/which-remote-url-should-i-use/。 - Vampire
嗯,我不知道他们的意思是什么。我只是在评估效果。 - Vampire
那不会解决我的npm问题。您能否请解释一下我如何执行选项#3?就像我说的,我已经将他们的证书添加到了我的受信任列表中。 - robev
1
显然你没有为 npm 安装它。我认为它不使用 Windows 商店。你必须使用 npm config set canpm config set cafile 将其添加到 npm - Vampire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接