node.js - 由于使用代理,Git 和 NPM 失败

标签 node.js git ssl github

由于某些原因,最近我无法使用 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 unable to verify the first certificate它没有帮助。最后一步导致:

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 是代理吗?

最佳答案

我不了解 Covenant Eyes,但根据我快速浏览他们网站的情况,我会说是的,他们正在使用代理技术来拦截您的网络流量并过滤/评级/阻止它。

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

CovenantEyes 用来加密流量的证书当然不是官方 GitHub 证书,因此 Git 提示它无法验证证书。您的浏览器会做同样的事情并向您大喊这是不安全的,直到您告诉它闭嘴(接受证书)。

要完成这项工作,您有多种方法,例如。 G。其中之一:

  • 不要使用 HTTPS URL,而要使用 GIT 或 SSH URL,因为那些您没有拦截 CovenantEyes 令人不安的
  • 如果可能的话,将 github.com 声明为 CovenantEyes 拦截机制的异常(exception)
  • 导入 CovenantEyes 用于加密内容的证书并将其添加到可信证书列表
  • 关闭证书验证

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

关于node.js - 由于使用代理,Git 和 NPM 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44596998/

相关文章:

node.js - Nodejs中的Socket.io P2P连接(同一服务器上的多个端口)

javascript - 在 Node 中创建文件全局变量

javascript - 在 socket.io 中向套接字添加功能的首选方法是什么?

git - sh.exe 已停止在 Windows 8 上运行

azure - Azure 云服务和 Salesforce 之间的相互(2 路)SSL

c# - 在 C# 中处理非验证 SSL 证书的最佳方法是什么

jquery - Cheerio NPM 尝试获取 nodeJS 中 img src 的值

PHP 通过 system() 调用 git 命令失败,退出代码为 128

带有 --index-filter : strange bash error ( ! 的 git-filter-branch:找不到事件)

VB.NET 2010 - 用于 FTPS 的 WinSCP 包