OpenSSL errno 10054,连接被拒绝,同时尝试连接到我们的服务器
Posted
技术标签:
【中文标题】OpenSSL errno 10054,连接被拒绝,同时尝试连接到我们的服务器【英文标题】:OpenSSL errno 10054,connection refused, whilst trying to connect to our server 【发布时间】: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 服务器。所以我认为这不是防火墙问题。
我想知道是否有人以前遇到过这个问题,他们是否可以在这里帮助我们?
【问题讨论】:
可能相关:An application may receive the "10054" error when the application receives data from a connection on a computer that is running Windows 7 or Windows Server 2008 R2 if a TDI filter driver is installed. 我们正在运行 Windows Server 2012 R2。该修补程序不适用于我们的 Windows Server 版本。不过谢谢你的建议。并且运行openssl客户端的电脑是运行x64版本openssl的windows 8.1 pro电脑。 我尝试在我们的防火墙上为端口 443 添加一个新条目。它没有改变任何东西。我还尝试连接到端口 8080 上的另一个 https 端点,该端点也不起作用。有趣的是,当我尝试连接到我们的其他服务器之一时,它可以正常工作。 【参考方案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 的正确选项以上是关于OpenSSL errno 10054,连接被拒绝,同时尝试连接到我们的服务器的主要内容,如果未能解决你的问题,请参考以下文章
OpenSSL SSL_read: Connection was reset, errno 10054
python: [Errno 10054] 现有连接被远程主机强行关闭
Git报错解决:OpenSSL SSL_read: Connection was reset, errno 10054 错误解决
Git报错解决:OpenSSL SSL_read: Connection was reset, errno 10054 错误解决
解决OpenSSL SSL_read: Connection was reset, errno 10054问题
git clone 提示:OpenSSL SSL_read: Connection was reset, errno 10054