我们正在通过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端点。我可以通过所有webbrowsers连接到Web环境,我们可以通过visual studio git界面使用git服务器。所以我认为这不是防火墙问题。
我想知道以前是否有人遇到过这个问题,是否可以帮助我们?
答案 0 :(得分:10)
10054未连接被拒绝,但是对等连接重置。这意味着,TCP连接已成功建立(s_client表示已连接),但是当从客户端向服务器发送更多数据时,服务器关闭连接而不读取所有数据(并发回TCP RST)。
虽然这可能是防火墙问题,但它也可能表明服务器配置存在问题,即服务器接受客户端但由于配置无效而无法继续。此类无效配置可能是缺少所请求数据的权限,没有可用私钥的证书或其他。我建议您查看服务器日志以获取更多信息。
我还看到TCP RST与服务器,负载均衡器或防火墙不了解当前的TLS版本,只是关闭连接。浏览器通过使用较低的TLS版本透明地重试来解决此问题。如果openssl s_client -ssl3
对此服务器起作用并且您收到证书,则可以尝试。
答案 1 :(得分:10)
确认您使用的是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
的选项。