在新的OS X安装中安装Homebrew时遇到问题(SSL错误)

3

我这里有一个全新的OS X安装(新虚拟机),尝试安装Homebrew时,出现了SSL错误。

fatal: unable to access 'https://github.com/Homebrew/homebrew/': Unknown SSL protocol error in connection to github.com:-9847
Failed during: git fetch origin master:refs/remotes/origin/master -n --depth=1

这是我正在使用的命令:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

我查了一下并尝试添加--insecure(或-k)并从https中删除s,但似乎没有帮助。使用--insecure,我只得到服务器终止了SSL握手。

有人知道这里出了什么问题吗?"xcode-select --install"也已经运行过了。

编辑:根据下面的建议,我将打包文件转储到pcap文件中,并使用tshark打开。从中我得到:

1 0.000000 我的IP地址被删除 -> 192.30.252.130 TCP 78 49451→443 [SYN] Seq = 0 Win = 65535 Len = 0 MSS = 1460 WS = 32 TSval = 170479114 TSecr = 0 SACK_PERM = 1 2 0.128228 192.30.252.130 -> 我的IP地址被删除 TCP 78 443→49451 [SYN,ACK] Seq = 0 Ack = 1 Win = 14240 Len = 0 MSS = 1436 SACK_PERM = 1 TSval = 2830778812 TSecr = 170479114 WS = 1024 [ETHERNET FRAME CHECK SEQUENCE INCORRECT] 3 0.128303 我的IP地址被删除 -> 192.30.252.130 TCP 66 49451→443 [ACK] Seq = 1 Ack = 1 Win = 132416 Len = 0 TSval = 170479237 TSecr = 2830778812 4 0.150128 我的IP地址被删除 -> 192.30.252.130 SSL 255 客户端Hello 5 0.150913 192.30.252.130 -> 我的IP地址被删除 SSL 1158 连续数据[以太网帧校验序列不正确]
6 0.150916 192.30.252.130 -> 81.26.52.196 TCP 64 443→49451 [FIN,ACK] Seq = 1101 Ack = 190 Win = 4237312 Len = 0 [ETHERNET FRAME CHECK SEQUENCE INCORRECT] 7 0.150961 我的IP地址被删除 -> 192.30.252.130 TCP 66 49451→443 [ACK] Seq = 190 Ack = 1101 Win = 131328 Len = 0 TSval = 170479257 TSecr = 2830778812 8 0.150990 我的IP地址被删除 -> 192.30.252.130 TCP 66 49451→443 [ACK] Seq = 190 Ack = 1102 Win = 131328 Len = 0 TSval = 170479257 TSecr = 2830778812 9 0.151046 我的IP地址被删除 -> 192.30.252.130 TCP 66 49451→443 [FIN,ACK] Seq = 190 Ack = 1102 Win = 132416 Len = 0 TSval = 170479257 TSecr = 2830778812 10 0.151156 192.30.252.130 -> 我的IP地址被删除 TCP 64 443→49451 [RST] Seq = 1102 Win = 4237312 Len = 0 [ETHERNET FRAME CHECK SEQUENCE INCORRECT]

奇怪。看起来你用得很对啊。你的操作系统版本是什么?如果在临时目录中只执行 git clone 'https://github.com/Homebrew/homebrew/',会发生什么? - Andrew Janke
@AndrewJanke 致命错误:无法访问'https://github.com/Homebrew/homebrew/': 在连接到github.com时出现未知的SSL协议错误:-9847 - Christian A. Strømmen
你使用的是哪个版本的OS X、curl和git? - Andrew Janke
@AndrewJanke 10.10.3、7.37.1和2.3.2。我的本地计算机具有相同的版本(但是OS X的10.10.4 beta版本),并且没有任何问题。 - Christian A. Strømmen
你是在虚拟机中运行 Hackintosh 吗?其余的网络工作正常吗? - Mark Setchell
显示剩余3条评论
2个回答

4
如果这是OS X的全新安装,我怀疑问题可能是由于代理或防火墙设置在到达github的路线上触发了SecureTransport中的一个罕见问题(错误?)。
您的libcurl是针对Security.framework编译的。错误代码-9847表示记录溢出
A record overflow occurred.
Value
–9847
Description
A record overflow occurred.
Available in OS X v10.3 and later.

"

错误可能在tls1Callouts.c中的这一行被定位。似乎客户端接收到了一个长度意外的记录。

这可能与gnutls中类似的问题有关:

"
TLS连接和F5防火墙存在几个问题,看起来似乎是这种情况。如果客户端hello在256到512字节之间,该防火墙会终止TLS会话。如果是这种情况,您可以使用wireshark进行验证。我们在gnutls的后续版本中采用的解决方案是添加填充:https://gitlab.com/gnutls/gnutls/commit/b6d29bb1737f96ac44a8ef9cc9fe7f9837e20465。您可以尝试使用tcpdump/wireshark进一步调查(将en0替换为您的接口名称):
$ sudo tcpdump -i en0 —n -s 0  -B 524288 -w test.pcap  port 443

在Wireshark中查看您的pcap文件(或直接在Wireshark中捕获)以获取有关每个阶段的详细信息。在www.sans.org上有一个很好的SSL/TLS解释。为了比较,我的(成功的)对话是这样的:

$ tshark -r test.pcap
  1   0.000000   10.0.0.125 -> 192.30.252.129 TCP 78 51229→443 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=32 TSval=235773429 TSecr=0 SACK_PERM=1
  2   0.133049 192.30.252.129 -> 10.0.0.125   TCP 74 443→51229 [SYN, ACK] Seq=0 Ack=1 Win=14240 Len=0 MSS=1460 SACK_PERM=1 TSval=1851779047 TSecr=235773429 WS=1024
  3   0.133148   10.0.0.125 -> 192.30.252.129 TCP 66 51229→443 [ACK] Seq=1 Ack=1 Win=131744 Len=0 TSval=235773562 TSecr=1851779047
  4   0.138296   10.0.0.125 -> 192.30.252.129 SSL 255 Client Hello
  5   0.278168 192.30.252.129 -> 10.0.0.125   TLSv1.2 1490 Server Hello
  6   0.278567 192.30.252.129 -> 10.0.0.125   TLSv1.2 1490 Certificate
  7   0.278696   10.0.0.125 -> 192.30.252.129 TCP 66 51229→443 [ACK] Seq=190 Ack=2849 Win=129632 Len=0 TSval=235773707 TSecr=1851779083
  8   0.278910 192.30.252.129 -> 10.0.0.125   TLSv1.2 399 Server Key Exchange
  9   0.278991   10.0.0.125 -> 192.30.252.129 TCP 66 51229→443 [ACK] Seq=190 Ack=3182 Win=130720 Len=0 TSval=235773707 TSecr=1851779083
 10   0.339768   10.0.0.125 -> 192.30.252.129 TLSv1.2 141 Client Key Exchange
 11   0.551009 192.30.252.129 -> 10.0.0.125   TCP 66 443→51229 [ACK] Seq=3182 Ack=265 Win=15360 Len=0 TSval=1851779144 TSecr=235773767
 12   0.551185   10.0.0.125 -> 192.30.252.129 TLSv1.2 157 Change Cipher Spec, Encrypted Handshake Message
 13   0.688512 192.30.252.129 -> 10.0.0.125   TCP 66 443→51229 [ACK] Seq=3182 Ack=356 Win=15360 Len=0 TSval=1851779186 TSecr=235773977
 14   0.691643 192.30.252.129 -> 10.0.0.125   TLSv1.2 157 Change Cipher Spec, Encrypted Handshake Message
 15   0.691720   10.0.0.125 -> 192.30.252.129 TCP 66 51229→443 [ACK] Seq=356 Ack=3273 Win=130976 Len=0 TSval=235774117 TSecr=1851779186
 16   0.692351   10.0.0.125 -> 192.30.252.129 TLSv1.2 215 Application Data

如果确实是这种情况,你可以通过编译支持openssl的自定义libcurl,并让git使用你的新libcurl来解决问题。或者,你也可以使用ssh连接到github(如果你在github上注册了公钥),而不是使用https连接。

刚刚做了这个,但我不确定我是否看到了这个特定的错误,或者它是其他什么问题。我已经将输出添加到我的原始问题中,@baf你能看一下吗? - Christian A. Strømmen
你能否在某处发布帧4和5的内容,“客户端Hello”和“Continuation数据”。您可以通过在“tshark”命令行中添加“-V”选项来获取详细信息。 - baf
使用-r -V选项,我得到了“tshark:“test.pcap”既不是字段也不是协议名称。”而只使用-V选项,我得到了“tshark:接口'Ethernet'的捕获过滤器“test.pcap”无效!”@baf - Christian A. Strømmen
tshark -V -r test.pcap,请参阅man tshark - baf
这是在使用tshark和-V -r参数运行后的完整输出:http://pastebin.com/cZg9NWwF @baf - Christian A. Strømmen
我不明白为什么服务器没有响应 Server Hello,以及第5帧中空的SSL部分是什么意思。我认为这可能是数据包损坏的原因。建议在 Server Fault 上提出新问题,询问连接失败的原因,并提供 tshark 输出的链接。也许有更有经验的人会帮助你解决问题。 - baf

0
如果您只是想要一个解决方案来安装Homebrew,您可以尝试使用其他工具下载其安装脚本。例如:像这样:
$ python -c "import urllib ; urllib.urlretrieve('https://raw.githubusercontent.com/Homebrew/install/master/install', 'install.rb')"
$ ruby install.rb

这样做是行不通的,因为脚本会再次尝试调用 git - baf
当然,你是对的。我没有注意到问题出在git本身。 - Dag Høidahl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接