【问题标题】:Problems installing Homebrew on a new OS X installation (SSL error)在新的 OS X 安装上安装 Homebrew 时出现问题(SSL 错误)
【发布时间】:2015-07-08 18:25:20
【问题描述】:

在此处安装全新的 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”也已运行。

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

1 0.000000 MY_IP_REMOVED -> 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 -> MY_IP_REMOVED 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 [以太网帧检查 序列不正确]

3 0.128303 MY_IP_REMOVED -> 192.30.252.130 TCP 66 49451→443 [ACK] Seq=1 Ack=1 Win=132416 Len=0 TSval=170479237 TSecr=2830778812

4 0.150128 MY_IP_REMOVED -> 192.30.252.130 SSL 255 客户你好

5 0.150913 192.30.252.130 -> MY_IP_REMOVED 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 [以太网帧检查序列 不正确]

7 0.150961 MY_IP_REMOVED -> 192.30.252.130 TCP 66 49451→443 [ACK] Seq=190 Ack=1101 Win=131328 Len=0 TSval=170479257 TSecr=2830778812

8 0.150990 MY_IP_REMOVED -> 192.30.252.130 TCP 66 49451→443 [ACK] Seq=190 Ack=1102 Win=131328 Len=0 TSval=170479257 TSecr=2830778812

9 0.151046 MY_IP_REMOVED -> 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 -> MY_IP_REMOVED TCP 64 443→49451 [RST] Seq=1102 Win=4237312 Len=0 [以太网帧检查 序列不正确]

【问题讨论】:

  • 很奇怪。看起来你用对了。什么操作系统版本?如果您只是在临时目录中执行 git clone 'https://github.com/Homebrew/homebrew/' 会发生什么?
  • @AndrewJanke 致命:无法访问'github.com/Homebrew/homebrew':连接到 github.com:-9847 时出现未知 SSL 协议错误
  • 您使用的是哪个版本的 OS X、curlgit
  • @AndrewJanke 10.10.3、7.37.1 和 2.3.2。我的本地计算机具有相同的版本(但 OS X 的 10.10.4 beta),它没有问题。
  • 那么您是否在虚拟机中运行Hackintosh?网络的其余部分是否正常工作?

标签: macos ssl github homebrew


【解决方案1】:

如果这是 OS X 的全新安装,我怀疑该问题可能是 SecureTransport 中的一个罕见问题(错误?),可能由您通往 github 的某处的代理或防火墙设置触发。

您的libcurl 是针对Security.framework 编译的。错误码-9847表示Record overflow

A record overflow occurred.
Value
–9847
Description
A record overflow occurred.
Available in OS X v10.3 and later.

错误可能与tls1Callouts.c 中的这一行有关。客户端似乎收到了一条意外长度的记录。

可能与类似的issue in gnutls: 相关。

TLS 连接和 F5 防火墙存在多个问题,并且 看起来就是这样。该防火墙终止 TLS 会话,如果 客户端问候在 256 到 512 字节之间。如果是这样的话,你 可以使用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 而不是 https 连接到 github(如果您在 github 上注册了您的公钥)。

【讨论】:

  • 刚做了这个,但我不确定我看到的是这个特定的错误还是其他问题。将输出添加到我原来的问题中,你能看一下吗@baf?
  • 您能否在某处发布第 4 帧和第 5 帧的内容,Client HelloContinuation Data。您可以在tshark 命令行中添加-V 选项来获取详细信息。
  • 使用 -r -V 我得到“tshark:“test.pcap”既不是字段也不是协议名称。”只需-V,我就会得到“tshark:接口'以太网'的无效捕获过滤器“test.pcap”!” @baf
  • tshark -V -r test.pcap,见man tshark
  • 这是使用 -V -r 通过 tshark 运行后的整个输出:pastebin.com/cZg9NWwF@baf
【解决方案2】:

如果您只是想要一个解决方法来安装 Homebrew,您可以尝试使用其他工具下载其安装脚本。例如。像这样:

$ python -c "import urllib ; urllib.urlretrieve('https://raw.githubusercontent.com/Homebrew/install/master/install', 'install.rb')"
$ ruby install.rb

【讨论】:

  • 这不起作用,因为脚本将尝试再次调用git
  • 你是对的,当然。我没有注意到是 git 本身有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
相关资源
最近更新 更多