您可以通过以下方式获取更多信息
# Windows
set GIT_CURL_VERBOSE=1
set GIT_TRACE_PACKET=2
# Unix
export GIT_CURL_VERBOSE=1
export GIT_TRACE_PACKET=2
然后尝试一个git push
.
如果您有代理设置,请仔细检查您的代理设置。
注意:git 2.8(2016 年 3 月)添加了有关错误 35 的更多信息:
See commit 0054045 (14 Feb 2016) by Shawn Pearce (spearce).
(Merged by Junio C Hamano -- gitster -- in commit 97c49af, 24 Feb 2016)
remote-curl
: 包括curl_errorstr
SSL 设置失败
For curl
错误35(CURLE_SSL_CONNECT_ERROR
)用户需要存储在中的附加文本CURLOPT_ERRORBUFFER
调试连接未启动的原因。
这是curl_errorstr
代替http.c
,因此如果消息非空,则将其包含在消息中。
另请查看该消息的常见原因:
如果它以前工作,但今天不工作,则 BitBucket 端的 SSL 私钥可能已过期(见下文,原因 #3),但这里的情况似乎并非如此(证书有效期直到12/03/2014)。
目标站点不喜欢该协议
发出如下所示的请求会导致未知 SSL 协议错误:
curl --sslv2 https://techstacks-tools.appspot.com/
为什么?好吧,在这种情况下,这是因为 techstacks 工具站点不支持 SSLv2,因此生成了curl (35) 错误。
目标站点不喜欢密码
您可能尝试使用站点配置为拒绝的 ssl 密码连接到该站点。
例如,匿名密码通常在面向客户的 ssl 加密站点上被禁用。 (我们中的许多人对任何 SSL 加密的网站都制定了全面拒绝政策——无论其目的是什么。)
以下命令字符串“can”也会导致curl(35)错误:
curl --ciphers ADH-RC4-MD5 https://some_web_site.some_domain.com/
不幸的是,您可以从curl 获得的错误响应类型很大程度上取决于ssl 服务器。在某些网站上,您会收到“未知 SSL 协议”错误,但在我的 techstacks-tools 网站上,我得到:
curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
感谢 Google,因为这个特定的错误比我工作中的网站生成的错误更具描述性,因为这至少告诉您 ssl 套接字已启动,但由于握手失败,套接字永远无法完成。
尝试使用该站点支持的密码连接到该站点。不确定使用哪种密码?好吧,让我介绍一下我的Cryptonark ssl 密码测试仪...
SSL 私钥已过期
今天早些时候,我在使用一个旧的 WebSeAL 网站时遇到了这个问题。
在IBM GSKit 中,您可以指定私钥密码的有效期限。到达特定日期后,您仍然能够启动 webseal 并侦听端口 443(或您设置的 https 端口值),但您将无法成功协商 SSL 会话。
在今天的例子中,旧的 WebSEAL 实例使用过期已久的 kdb 文件和过期已久的私钥密码。一旦更换为正确的、更新的版本,一切都会恢复正常。
重定向不当
一些 ISP 和 DNS 提供商喜欢拦截您失败的 DNS 查询,以便将您重定向到搜索引擎结果样式的页面,为您提供替代 URL 或“您的意思是……?”反查询结果。
如果您看到这样的错误:
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol,
这可能是由于您输入的主机名不正确或者主机名尚未在您的 DNS 中列出。您可以通过简单的“host
" or "nslookup
".
注意(2015 年 8 月):Git 2.6+(2015 年第 3 季度)将允许显式指定 SSL 版本:
http
:添加对指定SSL版本的支持
See commit 01861cb (14 Aug 2015) by Elia Pinto (devzero2000).
Helped-by: Eric Sunshine (sunshineco).
(Merged by Junio C Hamano -- gitster -- in commit ed070a4, 26 Aug 2015)
http.sslVersion
如果您想强制使用默认值,则在协商 SSL 连接时要使用的 SSL 版本。
可用和默认版本取决于 libcurl 是针对 NSS 还是 OpenSSL 构建以及所使用的加密库的特定配置。在内部这设置了 'CURLOPT_SSL_VERSION
' 选项;有关此选项格式和支持的 ssl 版本的更多详细信息,请参阅 libcurl 文档。
实际上该选项的可能值是:
- sslv2
- sslv3
- tlsv1
- tlsv1.0
- tlsv1.1
- tlsv1.2
可以被 ' 覆盖GIT_SSL_VERSION
' 环境变量。
强制 git 使用 libcurl 的默认 ssl 版本并忽略任何显式http.sslversion
选项,将 'GIT_SSL_VERSION' 设置为空字符串。