【问题标题】:Why Schannel fails to receive handshake from the server?为什么 Schannel 无法接收到来自服务器的握手?
【发布时间】:2017-09-28 15:15:59
【问题描述】:

当我试图从我们的 git 服务器中提取时,我收到了这个错误:

致命:无法访问“xxx”:OpenSSL SSL_connect:SSL_ERROR_SYSCALL 与xxx有关

在我能够通过简单地恢复系统来解决它之前发生这种情况,但这次我的系统恢复点由于某种原因被删除了,我也不能这样做。

所以发生这种情况是因为我的系统设置中与 SSL 相关的某些内容发生了变化,我不知道为什么。

我尝试安装 git 以使用 windows 证书。 store 而不是 OpenSSL,我得到了这个错误:

致命:无法访问“xxx”:schannel:接收握手失败, SSL/TLS 连接失败

同样的问题,不同的错误信息。在客户端打招呼之后,服务器没有发回打招呼消息。我认为这可能会发生,因为服务器不支持我在客户端问候消息中向服务器发送的任何密码套件。所以我尝试了configuring a group policy 并将服务器正在使用的密码套件按顺序排列。但这并没有什么不同。

我可以通过浏览器连接 git 服务器的站点。所以我的问题是,我能做些什么来解决这个问题?

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地方。此外,xxx 在故障排除方面也不是很有用。您可以考虑添加一些真实信息,包括来自s_client 的一些结果。

标签: windows git ssl openssl tls1.2


【解决方案1】:

就我而言,我将 .gitconfig 从

[http] sslbackend = schannel

[http] sslbackend = openssl

【讨论】:

  • 我遇到了类似的问题,这个解决方案似乎奏效了。
【解决方案2】:

当我尝试将 http 代理用于本地网络上的 git 存储库(无法通过该特定代理访问)时,我遇到了 unable to access 'https://hostname.local/reponame.git/': schannel: failed to receive handshake, SSL/TLS connection failed 错误。我将 http.proxy 设置重置为空字符串:

git config --global http.proxy ""

(请注意,在我的例子中,这是一个全局级别设置,YMMV。)

【讨论】:

    【解决方案3】:

    您应该再次尝试使用Git for Windows release 2.14.2 (June 21th, 2018) 进行测试,当ssl backend 设置为schannel 时,它会将代码添加到强制忽略http.sslCAinfo(这样Windows 证书存储不会被忽略)。
    这仅在使用 cURL v7.60.0(或更高版本)运行时才有意义。

    commit c5ad43e:

    http:使用安全通道时,默认忽略sslCAInfo

    从 cURL v7.60.0 开始,安全通道后端可以使用通过 http.sslCAInfo 提供的证书包,但这会覆盖 Windows 证书存储。由于默认情况下这是不可取的,所以让我们告诉 Git 在通过 http.sslBackend 配置 schannel 后端时默认不要求 cURL 使用该包,除非 useSSLCAInfo 覆盖此行为。

    【讨论】:

    • 恐怕不可能,因为这是很久以前的事了,我把我的电脑格式化作为最后的手段。所以我不再有这个问题了。谢谢你的回答
    【解决方案4】:

    我遇到了同样的问题(Windows 10),重新启动解决了这个问题。

    【讨论】:

      【解决方案5】:

      我的情况是,我在使用本地代理(在我的情况下为 px)访问 www(如 github.com)但也为我们公司的 github 站点(git.example.组织)。我以为这个站点也会在 www 中,但事实证明它实际上是通过 NAT-IP(内部)进行的。因此我不得不从我的本地代理中排除内部 IP 地址。然后它起作用了。

      【讨论】:

        【解决方案6】:

        一个“弱”的解决方案是设置GIT_SSL_NO_VERIFY:

        export GIT_SSL_NO_VERIFY=true
        

        或者在 Windows 上,在系统中设置环境变量,如果使用 Git 的命令行版本,则在命令行中设置:

        set GIT_SSL_NO_VERIFY=true
        

        它会按照它说的去做...

        【讨论】:

        • 这不是解决方案,而是临时解决方法。也非常适合测试其他问题是否阻止访问远程存储库。
        【解决方案7】:

        在我的例子中,NO_PROXY 变​​量没有正确配置。

        【讨论】:

          【解决方案8】:

          在我的情况下 - jenkins 工作中的同样问题 - 我提供了错误的用户凭据。

          【讨论】:

            【解决方案9】:

            我的错误情况有解决方案。您可以使用命令:

            git push orgindestination_branch

            【讨论】:

            • 猜这个答案断章取义
            猜你喜欢
            • 2016-06-10
            • 2018-11-16
            • 2020-05-14
            • 2022-01-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-01
            • 2012-04-15
            相关资源
            最近更新 更多