从今天开始(或过去几天内),当我尝试连接到 github.com(例如克隆存储库)时遇到 SSL 错误。
这是运行 Red Hat 4.1.2-33 的旧版服务器。
当我尝试连接时,它看起来是这样的:
$ curl https://www.github.com --verbose
* About to connect() to www.github.com port 443 (#0)
* Trying 192.30.252.130... connected
* Connected to www.github.com (192.30.252.130) port 443 (#0)
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* NSS error -12286
* Closing connection #0
* SSL connect error
curl: (35) SSL connect error
我可以看到这一页NSS 错误代码为:
“无法与对方安全通信:没有通用的加密算法。”
本地和远程系统不共享任何密码套件。这可能是由于任一端的配置错误造成的。也可能是由于服务器配置错误,使用非 RSA 证书和 RSA 密钥交换算法造成的。
如果我没记错的话,github.com 似乎最近更新了 SSL 证书,而我的服务器没有与之兼容的密码套件。这是一个旧服务器,所以我并不感到惊讶。
我已经尝试过yum update nss
(因为 curl 似乎正在使用这个)但是yum update openssl
这些包都没有更新。
我也尝试过按照程序大纲这里但无济于事。
我对 TLS 握手工作原理的了解有些不足,甚至无法更深入地排除故障。有人有什么好主意,可以开始深入挖掘并找出问题所在以及我需要更新哪些内容吗?升级操作系统暂时不是一种选择。
更新
进一步挖掘后发现,这似乎是 libcurl 的问题,以及它在通过 git 连接到 github.com 时使用的密码。我能如果我明确指定了兼容的密码,则 curl 可以正常工作:
$ curl https://github.com --cipher rsa_aes_128_sha
我甚至可以将--cipher rsa_aes_128_sha
参数添加到 .curlrc 文件中,并让 curl 默认使用该密码。不幸的是,git 命令似乎没有发现这一点,所以我无能为力……我也找不到指定密码的替代方法。这是git pull
github.com 存储库上详细结果的样子:
$ GIT_CURL_VERBOSE=1 git pull
* Couldn't find host github.com in the .netrc file, using defaults
* About to connect() to github.com port 443 (#0)
* Trying 192.30.252.129... * Connected to github.com (192.30.252.129) port 443 (#0)
* CAfile: /root/certs/cacert.pem
CApath: none
* NSS error -12286
* Expire cleared
* Closing connection #0
* Couldn't find host github.com in the .netrc file, using defaults
* About to connect() to github.com port 443 (#0)
* Trying 192.30.252.129... * Connected to github.com (192.30.252.129) port 443 (#0)
* CAfile: /root/certs/cacert.pem
CApath: none
* NSS error -12286
* Expire cleared
* Closing connection #0
error: SSL connect error while accessing https://github.com/twbs/bootstrap.git/info/refs
fatal: HTTP request failed
这可能是一条死路……看起来 StackOverflow 上的这个家伙遇到了完全相同的问题。
答案1
当今的 SSL/TLS 配置受到过去几年出现的安全考虑因素的驱动,例如 BEAST 和 CRIME 攻击以及 RC4 的弱点,在某些情况下,这会导致一些旧客户端完全无法通信,因为它们不支持更现代的协议、密码套件等。即使是 RHEL 5 客户端偶尔遇到麻烦通过 SSL/TLS 与 RHEL 6 服务器通信。通过一些工作,您可能能够手动指定要使用的密码套件,但对于像 RHEL4 这样旧的系统,这不太可能。这种情况使得升级您的仅有的實際選擇。
答案2
... 在你花时间撞墙之前)检查你的日期/时间:
[alexus@wcmisdlin02 ~]$ sudo ntpdate time.apple.com
2 Jan 16:33:44 ntpdate[6883]: adjust time server 17.171.4.35 offset 0.000416 sec
[alexus@wcmisdlin02 ~]$
这可能不是你的问题,但当时间不合适时我遇到了问题,SSL 对我来说不起作用。
答案3
我认为这可能就是你正在寻找的:
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/PKCS11/Module_Specs
它对我认为您需要使其默认工作的设置进行了解释(无需在命令行上指定)。
我的 centOS 6.8 系统上的文件名是 /etc/pki/nssdb/pkcs11.txt