【问题标题】:OpenSSL errno 10054,connection refused, whilst trying to connect to our serverOpenSSL errno 10054,连接被拒绝,同时尝试连接到我们的服务器
【发布时间】:2014-10-18 14:21:09
【问题描述】:

我们正在通过 https 运行 git 服务器,并且连接没有任何问题,因为我们都使用了 Visual Studio。现在有人想使用标准的 git bash 连接失败,输出如下错误。

fatal: unable to access 'https://server/Repo.git/': Unknown SSL protocol error in connection to server:443

我尝试了一些不同的密码套件,但没有任何效果。然后我想到可能是git还不支持ECDSA证书。所以我用 RSA 交换了 ECDSA 证书。那也没用。

然后我尝试使用以下命令连接 OpenSSL s_client:

OpenSSL> s_client -connect server:443

这是运行命令的输出:

CONNECTED(0000018C)
write:errno=10054
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 307 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

我在谷歌搜索错误号10054,发现它意味着连接被拒绝。我们使用 IIS 8.5 为 git 服务器提供 https 端点。我可以通过所有的网络浏览器连接到网络环境,我们可以通过 Visual Studio 的 git 界面使用 git 服务器。所以我认为这不是防火墙问题。 我想知道是否有人以前遇到过这个问题,他们是否可以在这里帮助我们?

【问题讨论】:

标签: git iis https openssl


【解决方案1】:

10054 不是连接被拒绝,而是连接被对端重置。这意味着,TCP 连接已成功建立(s_client 表示 CONNECTED),但是当从客户端向服务器发送更多数据时,服务器关闭了连接而不读取所有数据(并返回 TCP RST)。

虽然这可能是防火墙问题,但也可能表明服务器配置存在问题,即服务器接受客户端但由于配置无效而无法继续。此类无效配置可能是请求数据的权限缺失、没有可用私钥的证书或其他。我建议您查看服务器日志以获取更多信息。

我还看到 TCP RST 与不理解当前 TLS 版本并简单地关闭连接的服务器、负载平衡器或防火墙。浏览器通过使用较低的 TLS 版本透明地重试来解决此问题。如果openssl s_client -ssl3 对这个服务器起作用并且你收到证书,你可以试试。

【讨论】:

    【解决方案2】:

    确认您使用的是 TLS 1.0 或更高版本。某些服务器需要 TLS 1.2。如果您不确定您的服务器是否支持最高 TLS 1.2,请查看上面 Steffen Ulrich 的回答并先尝试。

    如果这没有帮助,请检查端点是否需要SNI。如果是这种情况,这可能是问题所在。如果您调用s_client 命令并将servername 参数设置为您要联系的服务器名称,那么它应该可以工作。

    基本命令示例:

    s_client -connect example.com:443 -tls1 -servername example.com
    

    您可以在s_client man page 找到s_client 的选项。

    【讨论】:

    • 在 windows 版本的 openssl -servername 似乎不是 s_client 的正确选项
    猜你喜欢
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 2021-07-03
    • 2019-05-06
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多