克隆我的回购工作; 推回去没有.
第一次克隆不起作用:
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
Run Code Online (Sandbox Code Playgroud)
所以我在.gitconfig文件中添加了以下自定义证书:
[http]
sslCAInfo = U:/ca-bundle.crt
Run Code Online (Sandbox Code Playgroud)
现在克隆工作:
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.
Run Code Online (Sandbox Code Playgroud)
好了现在推动:
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/'
Run Code Online (Sandbox Code Playgroud)
当我尝试使用我的手机(绕过企业防火墙)通过个人火锅推送时,它推得很好.
为什么clone使用自定义证书但不是push?我想在不使用ssh的情况下解决这个问题.
贵公司的防火墙安装了一个代理,在中间充当人.为此,它为您访问的站点创建证书,例如github.com.这些证书显然具有不同的颁发者(您公司的内部CA),默认情况下git客户端不会信任这些证书.关闭sslVerify强制git客户端接受来自任何发行者的任何证书.这有潜在危险.将您公司的CA添加到git客户端信任的发布者列表中的原始方法是恕我直言,这是允许您的git客户端从公司防火墙后面与github.com对话的更好方法.
那么为什么这个设置不能让你push呢?到目前为止,其他海报忽略的是,这种情况下的错误不是 SSL错误.只有您的客户才能看到您公司的证书.如果解决了,就解决了.Github没有看到这个证书.因此,使用SSL设置进行任何进一步的调整都无济于事.
我可以重现你的情况,因为我可以首先看到SSL自签名证书问题,当我添加代理证书时,该问题就消失了sslCAInfo.坏消息:我无法重现身份验证失败错误.推动github刚刚起作用.好消息:从类似于你的设置推送到github是可能的.
如果它不是SSL问题,那么它只能由代理引起.由于代理向客户端提供自己的证书,因此能够解密SSL流量并对交换的数据进行深入检查.代理可以禁用某些命令,限制对特定站点的访问或从请求中删除用户名/密码.
请与贵公司的IT安全人员交谈.他们应该能够澄清代理是否对github或某些git命令施加了访问限制.
更新
通过Fiddler路由git web流量可以完成如下(从命令行使用git):
-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
Run Code Online (Sandbox Code Playgroud)
在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 [...]
Run Code Online (Sandbox Code Playgroud)
或者,使用"简洁摘要"(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)
Run Code Online (Sandbox Code Playgroud)
在Fiddler Web Debugger的右窗格中,您可以进一步调查交换的数据.特别是对于上面显示的三个请求中的最后一个,您应该在"Headers"选项卡中看到类似的内容:
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
Run Code Online (Sandbox Code Playgroud)
因此,您可以证明您的客户确实发送了授权信息.如果没有,我会对结果非常感兴趣.
我相信这可以帮助你。
git config --global http.sslVerify false
正如您可能猜到的,此命令更改 ssl 设置以禁用 ssl 验证。
警告:此方法不安全。
如果您想要恢复它,您可以随时启用。
git config --unset http.sslVerify
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |