由于使用代理,Git和NPM失败

rob*_*bev 3 git ssl github node.js

由于某种原因,最近我无法使用git推送到github,或者使用npm来安装节点模块.(我使用的是Windows 10)

我用git得到这个错误:

$ git push origin master fatal: unable to access
'https://github.com/$$$/$$$.git/': SSL certificate problem:
unable to get local issuer certificate
Run Code Online (Sandbox Code Playgroud)

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

我更新了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
Run Code Online (Sandbox Code Playgroud)

我试过简单,require('ssl-root-cas').inject();但它没有帮助我的错误消失.

我不知道它是否相关,但我使用的是CovenantEyes.我看过的一些网站代理可能是一个问题,CovenantEyes是代理吗?

Vam*_*ire 5

我不知道契约之眼,但从我从他们的网站上快速浏览看到的,我会说是的,他们正在使用代理技术拦截您的网络流量并过滤/评级/阻止它.

使用HTTPS时,与服务器的通信在客户端和服务器之间完全加密,因此代理无法拦截,因为它没有服务器的私有信息.因此它最多可以执行一个有用的中间人攻击,这意味着它会从服务器请求HTTPS页面,然后使用自己的证书对其进行加密,然后再将其呈现给您的浏览器(此星座中的Git是一个浏览器,如它请求HTTP/HTTPS URL并使用它们).

CovenantEyes用于加密流量的证书当然不是官方的GitHub证书,因此Git抱怨它无法验证证书.您的浏览器也会这样做,并对您大喊大叫这是不安全的,直到您告诉它关闭(接受证书).

为了使这项工作,你有几种方法,例如:

  • 不要使用HTTPS URL,而是使用GIT或SSH URL,就像那些没有拦截CovenantEyes的人一样令人不安
  • github.com如果可能的话,宣布CovenantEyes中的拦截机制是例外
  • 导入CovenantEyes用于加密内容的证书,并将其添加到可信证书列表中
  • 关闭证书验证

我想我更喜欢第一种方式,这也是最简单的方法.