问题回溯
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-services'...
fatal: unable to access 'https://github.com/Homebrew/homebrew-services/': error:1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number
Error: Failure while executing; `git clone https://github.com/Homebrew/homebrew-services /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services --origin=origin --template= --config core.fsmonitor=false` exited with 128.
好久没用brew 命令差点翻车,今天也是重新整理了下解决思路,假如你也在执行如下命令出现该问题那就一起看看解决方案:
brew install xx
brew update xx
brew services list
brew tap xxx
...
解决方案
这个错误实际就是SSL握手的错误,而这个错误的导火索是你直接使用
HTTP拉取,如下
git clone http://xxx.git
# homebrew 执行命令默认就是http方式
使用HTTP必然通过握手,有网络安全经验的童鞋就知道,握手哪怕是基于SSL/TLS 都是有安全隐患的,特别是在公共网络或者企业网络【我属于这个】 是会被代理服务器劫持的,这就导致认证过不去,导致连接【握手】失败。
因此解决方案有两个:
1. 替换HTTP方式使用SSH
这个最简单,最安全,为啥SSH没有问题呢?
因为SSH基于对称加密,你的秘钥信息是保存在GitHub/其他仓库的内部服务器,这样安全性除了你故意让别人知道你本机的私钥信息,基本没有风险,配置SSH私钥这个 网上一堆,这里给一个Github官方标准配置版:ssh层面的CRUD,
需要记得将你创建的SSH公钥上传到GitHub:
事实上在GitHub在好几年前就曾给每一个coder 发过邮件让你使用SSH方式去拉取远程仓库
那么回归上面问题,他说我的错误具体原因是:
Failure while executing; git clone https://github.com/Homebrew/homebrew-services /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services
那么使用SSH 后 新的命令执行方式:
git clone git@github.com:Homebrew/homebrew-services.git /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services
2. 关闭SSL认证【临时使用,不推荐永久关闭】
这个操作是危险的,这就意味着可以和目标远程仓库直连,无法使用SSL认证,也就是没有信任,你会被常说的中间人伪装攻击的,一般来说仓库的SSL认证默认是打开了,如下:
因此关闭方式就是:
git config --global http.sslVerify false
这样也可以继续执行命令,但是最好不要经常开启