gpt4 book ai didi

git clone 工作但在替换防火墙后面的 SSL 证书后推送不工作

转载 作者:IT王子 更新时间:2023-10-29 00:46:28 32 4
gpt4 key购买 nike

克隆我的 repo 有效;推回它不会。

第一次克隆失败:

git clone https://github.com/slimsnerdy/testy.git
Cloning into 'testy'...
fatal: unable to access 'https://github.com/slimsnerdy/testy.git/': SSL certificate problem: self signed certificate in
certificate chain

所以我在 .gitconfig 文件中添加了以下自定义证书:

[http]
sslCAInfo = U:/ca-bundle.crt

现在克隆有效:

Cloning into 'testy'...
remote: Counting objects: 25, done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 25 (delta 8), reused 6 (delta 1), pack-reused 0
Unpacking objects: 100% (25/25), done.

好的,现在推送:

new-item test.txt
git add *
git commit -m "push test"
git push
Username for 'https://github.com': slimsnerdy
Password for 'https://slimsnerdy@github.com':
remote: Anonymous access to slimsnerdy/testy.git denied.
fatal: Authentication failed for 'https://github.com/slimsnerdy/testy.git/'

当我尝试使用我的手机通过个人火锅进行推送时(绕过公司防火墙),它推送正常。

为什么 clone 使用自定义证书而不是 push?我想在不使用 ssh 的情况下解决这个问题。

最佳答案

贵公司的防火墙安装了一个代理man in the middle .为此,它会为您访问的站点创建证书,例如github.com。这些证书显然有不同的颁发者(您公司的内部 CA),默认情况下 git 客户端不会信任它们。关闭 sslVerify 会强制 git 客户端接受来自任何颁发者的任何证书。这是潜在的危险。您最初的方法是将您公司的 CA 添加到 git 客户端信任的发行者列表中,恕我直言,这是允许您的 git 客户端从您公司的防火墙后面与 github.com 对话的更好方法。

那么为什么这个设置不允许您推送?到目前为止,其他张贴者忽略的是,本例中的错误不是 SSL 错误。只有您的客户才能看到您公司的证书。如果解决了,那就解决了。 Github 没有看到这个证书。因此,任何进一步调整 SSL 设置都无济于事。

就我第一次看到 SSL 自签名证书问题而言,我可以重现您的案例,当我将代理的证书添加到 sslCAInfo 时该问题消失了。坏消息:我无法重现身份验证失败错误。推送到 github 就成功了。好消息:可以从类似于您的设置推送到 github。

如果不是SSL的问题,那么只能是代理问题了。因为代理向客户端提供自己的证书,所以它能够解密 SSL 流量并对交换的数据进行深入检查。代理确实有权禁用某些命令,限制对特定站点的访问或从请求中删除用户名/密码。

请与贵公司的 IT 安全人员交谈。他们应该能够澄清代理是否对 github 或某些 git 命令施加了访问限制。

更新

通过 Fiddler 路由 git web 流量可以按如下方式完成(从命令行使用 git):

  1. 运行 fiddler
  2. 在 git bash 中,cd 到您的工作目录并添加选项 -c http.sslVerify=false -c http.proxy=127.0.0.1:8888 到 git 命令。

例子:

$ git -c http.sslVerify=false -c http.proxy=127.0.0.1:8888 push

在 Fiddler 中,您现在应该看到如下内容:

2   200 HTTP    Tunnel to   github.com:443  0           git-remote-https:6512           
3 401 HTTPS github.com /xxx/xxxx.git/info/refs?service=git-receive-pack [...]
4 200 HTTPS github.com /xxx/xxxx.git/info/refs?service=git-receive-pack [...]

或者,使用“简洁摘要”(Ctrl/Shift/T) 导出:

CONNECT http://github.com:443
200 Connection Established ()

GET https://github.com/xxx/xxxx.git/info/refs?service=git-receive-pack
401 Authorization Required (text/plain)

GET https://github.com/xxx/xxxx.git/info/refs?service=git-receive-pack
200 OK (application/x-git-receive-pack-advertisement)

在 Fiddler Web 调试器的右侧 Pane 中,您可以进一步调查交换的数据。特别是对于上面显示的三个请求中的最后一个,您应该在“ header ”选项卡中看到类似这样的内容:

GET /xxx/xxxx/info/refs?service=git-receive-pack HTTP/1.1
Host: github.com
Authorization: Basic XyzzY1337qQ=
User-Agent: git/2.13.0.windows.1
Accept: */*
Accept-Encoding: gzip
Pragma: no-cache

这样你就可以证明你的客户确实发送了授权信息。如果没有,我会对结果非常感兴趣。

关于git clone 工作但在替换防火墙后面的 SSL 证书后推送不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50493545/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com