【问题标题】:Unknown SSL protocol error in connection连接中的未知 SSL 协议错误
【发布时间】:2013-12-27 18:24:06
【问题描述】:

我想将我的提交推送到 Bitbucket 存储库,但发生了这个错误:

Fatal: unable to access
'https://myUsername@bitbucket.org/myUsername/myRepository.git/':
Unknown SSL protocol error in connection to bitbucket.org:443

【问题讨论】:

    标签: git ssl push bitbucket atlassian-sourcetree


    【解决方案1】:

    您可以通过

    获得更多信息
    # 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 的更多信息:

    参见Shawn Pearce (spearce)commit 0054045(2016 年 2 月 14 日)。
    (由 Junio C Hamano -- gitster -- 合并于 commit 97c49af,2016 年 2 月 24 日)

    remote-curl:在 SSL 设置失败时包含 curl_errorstr

    对于curl 错误35 (CURLE_SSL_CONNECT_ERROR),用户需要存储在CURLOPT_ERRORBUFFER 中的附加文本来调试连接未启动的原因。
    这是http.c 中的curl_errorstr,如果它不为空,请在消息中包含它。


    还可以查看common causes for that message

    如果它以前工作,而今天不工作,则可能是 SSL 私钥在 BitBucket 端已过期(见下文,原因 #3),但这里似乎不是这种情况(证书有效期至 2014 年 3 月 12 日)。


    目标站点不喜欢协议

    触发如下请求,会导致出现未知 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 服务器。在某些网站上,您会收到 Unknown SSL Protocol 错误,但在我的 techstacks-tools 网站上,我得到:

    curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
    

    向 Google 致敬,因为这个特定错误比我的网站在工作中生成的错误更具描述性,因为这至少告诉您一个 ssl 套接字已启动,但由于握手失败,该套接字永远无法完成。

    尝试使用站点支持的密码连接到站点。不确定要使用哪种密码?好吧,让我介绍一下我的cryptonark ssl cipher tester...

    SSL 私钥已过期

    我今天早些时候在一个旧的 WebSeAL 站点上遇到了这个。
    在 IBM GSKit 中,您可以指定私钥密码的有效期。达到特定日期后,您仍然可以启动 webseal 并侦听端口 443(或您将 https-port 值设置为的任何值),但您将无法成功协商 SSL 会话。
    在今天的案例中,旧的 WebSEAL 实例正在使用长期过期的 kdb 文件和长期过期的私钥密码。替换为正确的更新版本后,一切都恢复正常了。

    不正确的重定向

    一些 ISP 和 DNS 提供商喜欢拦截您失败的 DNS 查询,以便将您重定向到搜索引擎结果样式的页面,为您提供替代 URL 或“您的意思是...?”反查询结果。
    如果你看到这样的错误:

     error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol, 
    

    这可能是由于您输入的主机名不正确,或者主机名尚未在您的 DNS 中列出。您可以使用简单的“host”或“nslookup”进行验证。


    注意(2015 年 8 月):Git 2.6+(2015 年第三季度)将允许明确指定 SSL 版本:

    http:添加对指定 SSL 版本的支持

    commit 01861cb(2015 年 8 月 14 日)Elia Pinto (devzero2000)
    帮助者:Eric Sunshine (sunshineco)
    (由 Junio C Hamano -- gitster -- 合并于 commit ed070a4,2015 年 8 月 26 日)

    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' 设置为空字符串。

    【讨论】:

    • 谢谢@VonC - 使用“export GIT_SSL_VERSION=tlsv1.1”为我解决了这个问题(在手动重新构建 git 后,它使用 libcurl.so.4)。没有这个,我无法将 git 连接到 visualstudio.com(visual studio online)。
    • 我们偶然发现了error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol 的一个版本,结果我们的https 代理只接受http,即我们需要https_proxy=http://proxy(注意:右轴上的http)而不是https_proxy=https://proxy(注意: https on the rhs).
    【解决方案2】:

    根据bitbucketknowledgebase,也有可能是repository的所有者超出计划限制造成的。

    如果您进一步向下看页面,似乎也可以通过使用太旧的 git 版本(目前需要 1.7)来触发此错误。

    【讨论】:

    • 感谢您的提示,我通过从 git 1.8 升级到 git 2.0 解决了这个问题。谢谢。
    • 如何更新呢?我有同样的问题,不知道如何解决?请帮帮我
    • 截至 18 年 8 月 1 日,必须将 Git 从 2.7.2 更新到 2.18.1 才能使用 Bitbucket 解决此问题
    • 我遇到了这个问题,但因为我使用的是两位帐户。当我将一个帐户更改为另一个帐户时,因为 Windows 将用户和密码存储在凭据管理器中,我必须输入和编辑其值。这对我有用。
    • @heavyrick 您在哪里更改帐户?
    【解决方案3】:

    设置以下 git 设置为我解决了这个问题

    git config --global --add http.sslVersion tlsv1.0

    我猜公司代理服务器不喜欢默认的加密协议。

    【讨论】:

      【解决方案4】:

      在许多情况下,它与代理问题有关。 如果是这样,只需配置您的 git 代理

      git config --global http.proxy HOST:PORT
      

      【讨论】:

      • 谢谢解决了我的问题,虽然我不得不设置没有代理,即 git config --global http.proxy ""
      • 这解决了我的问题,因为我使用上述解决方案意识到在尝试通过我的公司代理时发生故障。轻松解决,谢谢!
      • 谢谢@ChristopherGrigg - 空代理也为我工作。在公司代理后面。
      【解决方案5】:

      此错误也出现在服务器已关闭。来自技术支持的电子邮件:

      “我们经历了一次中断,它影响了网站的流量,因为 以及通过 HTTPS 的 Mercurial 和 Git 流量。 SSH 不受影响 尽管。请随时查看此页面以获取更多信息:

      http://status.bitbucket.org/"

      所以稍后再试一次,它可能会自行解决。为我做的

      【讨论】:

      • 感谢您的提示。应该是首先要检查的。在试图破坏我的头脑之后,找到了你的小费,确实足够了。 Bit Bucket 更多地处于维护状态。 status.bitbucket.org
      【解决方案6】:

      我是通过公司代理获得的。

      解决者:

      git config http.sslVerify "false"

      【讨论】:

      • 这是一个非常糟糕的主意,因为它会禁用所有安全检查并且可能会发生中间人攻击。
      【解决方案7】:

      我遇到了同样的问题。使用最新版本的 git 并且没有代理。

      我修好了:

      • 登录 GitHub
      • 进入界面:“个人设置”,然后点击“SSH Keys” 请确认您是否放置了命令生成的'id_rsa.pub'
      • 'ssh-keygen -t rsa' 在 windows 上进入 github --> GIT BASH
      • “添加 SSH 密钥”并将“id_rsa.pub”放入其中。

      更多信息: create the key

      copy the key

      【讨论】:

        【解决方案8】:

        我在 Android Studio 2.1.3 中使用版本控制时遇到了这个问题,我面临的场景如下:

        1-我打开IDE并点击“更新/拉取”图标(Ctrl+T)

        2- 它没有要求主密码并且失败了,给了我这个错误:

        Unknown SSL protocol error in connection to bitbucket.org:443
        

        3- 我试图获取存储库(右键单击 > git > 存储库 > 获取)

        4- 它要求我输入主密码,我输入了它

        5- 它尝试获取但一次又一次失败

        6- i 重新启动 Android studio

        7- 我试图获取存储库(右键单击 > git > 存储库 > 获取)

        8- 它要求我输入主密码,我输入了它

        9- 现在一切都OK,一切正常

        结论

        也许Android Studio在任何git操作之前首先需要主密码,否则即使稍后它要求主密码它也会一直失败,我不知道,这就是发生在我身上的场景

        【讨论】:

          【解决方案9】:

          拥有两台电脑,

          第一是我的公司实验室通过 VPN 连接到我们的公司网络。这就像在大防火墙和一堆路由器后面的公司内部,内部和外部(甚至电信)在网络和防火墙上摆弄,要伸出手,我必须提供诸如代理用户和密码,即使那样,有时它可以工作,有时不能。

          即我可以使用 SVN JSVN MAVEN 下载、ANT 下载通过防火墙进行访问,我可以使用 git clone http://git... repos。

          但是我不能做 git clone https://git... repo。 在这个最新的案例中,我收到了这个错误。

          我在现场的第二台计算机是我家中的小实验室,没什么特别的,通过 WAN 连接到 www 并使用上面提到的所有工具以及 git clone https://git... repo像嗅探一样工作而无需做任何特别的事情。

          结论:坐在“以某种方式管理的防火墙”后面通常是麻烦的原因。要解决这个问题,请带上您的小型无保护实验室并在家中进行 www 连接,如果它运行,请不要浪费时间与您的安全人员在一起,除非知道为什么它在您的系统中不起作用,否则他们将工作数周情况下,也许您可​​以与便携式驱动器共享克隆的 git 存储库。

          约瑟夫 - 在这种情况下浪费时间变老;-)

          【讨论】:

            【解决方案10】:

            我使用 tortoiseGit。我有同样的问题。然后在推送设置中,我取消选中“autoload putty key”,尝试推送,然后我再次检查它,然后推送,它工作了。但说真的,我不知道为什么。

            【讨论】:

              【解决方案11】:

              执行

              nc -v -z <git-repository> <port>
              

              你的输出应该看起来像

              "Connection to <git-repository> <port> port [tcp/*] succeeded!"
              

              如果你得到

              connect to <git-repository> <port> (tcp) failed: Connection timed out
              

              您需要编辑您的~/.ssh/config 文件。添加如下内容:

              Host example.com
              Port 1234
              

              【讨论】:

                【解决方案12】:

                我目前使用的公司 HTTP 代理偶尔会出现此错误。我可以通过简单地在浏览器中访问 bitbucket.org 来修复它,然后重新执行命令。不知道为什么会这样,但它确实为我解决了这个问题(至少是暂时的)。

                【讨论】:

                  【解决方案13】:

                  如果你在中国遇到“Unknown SSL protocol error in connection to bitbucket.org:443”,可能是github暂时被防火墙屏蔽了。您可以尝试使用VPN,这会奏效。祝你好运!

                  【讨论】:

                    【解决方案14】:

                    当推送大量源(近 700Mb)时,我会发生此错误,然后我尝试部分推送它并成功推送。

                    【讨论】:

                      【解决方案15】:

                      我遇到了同样的问题,尝试了此处提供的所有更改 SSL 设置。如果您在公司网络中使用 ssh 密钥和 Gerrit 之类的工具。 1. 获取您的 ssh 密钥, 2. 访问 Bitbucket 并导航到配置文件 >> 设置 >> SSH 密钥 >> 添加密钥。

                      ssh key 添加后,再次尝试推送。

                      【讨论】:

                        【解决方案16】:

                        我能够通过运行解决它

                        git config --list --show-origin
                        

                        然后看到我有一行:

                        file:c:/Users/user/.gitconfig http.sslversion=sslv3

                        我编辑了文件 c:/Users/user/.gitconfig,并删除了 [http] 行和 sslversion=sslv3 行并为我修复了它。

                        【讨论】:

                          猜你喜欢
                          • 2017-12-22
                          • 2014-12-16
                          • 2017-10-02
                          • 1970-01-01
                          • 2015-05-17
                          • 2011-03-15
                          • 2019-12-15
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多