CentOS6.9下curl访问api.twitter.com报SSL connect error问题咨询
针对CentOS 6.9 + curl 7.19.7连接Twitter API失败的问题解答
一、该配置是否存在已知问题?
没错,这个组合确实存在明确的兼容性问题,而且是老系统适配现代HTTPS服务的典型问题:
- CentOS 6.9早在2020年就停止了官方维护,自带的
curl 7.19.7和NSS 3.27.1都是非常老旧的版本,它们仅支持TLS 1.0/1.1这类已被主流服务淘汰的协议,也不兼容现代服务端要求的加密套件。 - Twitter的API服务器现在仅接受TLS 1.2及以上版本的连接请求,你的curl/NSS栈无法和服务器协商出符合要求的加密通道,直接触发了
NSS error -5961(这个错误本质就是SSL协议协商失败,服务器拒绝了旧版本的TLS请求)。 - 不止Twitter,现在绝大多数主流API和网站都已经不再支持TLS 1.0/1.1,所以这类问题在老系统上是普遍存在的。
二、无法升级OS时,如何通过源码编译构建可用组合?
既然不能升级系统,你可以通过源码编译新版curl + OpenSSL的方式解决问题,替换掉系统默认的老旧SSL工具链,而且不会破坏系统原有依赖。具体步骤如下:
第一步:安装编译依赖
先安装编译所需的基础工具和依赖包:
yum install gcc make autoconf libtool zlib-devel
第二步:编译安装新版OpenSSL
选择长期支持的OpenSSL 1.1.1系列(比如1.1.1w,它支持TLS 1.2/1.3,安全补丁更新至2025年):
# 下载源码包 wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar -xzf openssl-1.1.1w.tar.gz cd openssl-1.1.1w # 配置编译参数,指定安装到独立目录(避免覆盖系统默认版本) ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib # 编译并安装 make -j$(nproc) make install
第三步:编译安装新版curl
选择兼容OpenSSL 1.1.1的稳定版curl(比如7.88.1):
cd .. wget https://curl.se/download/curl-7.88.1.tar.gz tar -xzf curl-7.88.1.tar.gz cd curl-7.88.1 # 配置编译参数,指定使用刚编译的OpenSSL,同样安装到独立目录 ./configure --prefix=/usr/local/curl --with-openssl=/usr/local/openssl --with-zlib # 编译并安装 make -j$(nproc) make install
第四步:验证并使用新curl
直接用新编译的curl测试连接:
/usr/local/curl/bin/curl https://api.twitter.com/ -v
如果想让这个新curl成为默认使用的版本,可以把它的路径加入环境变量:
echo 'export PATH=/usr/local/curl/bin:$PATH' >> ~/.bashrc source ~/.bashrc
注意事项
- 绝对不要覆盖系统默认的curl和OpenSSL,否则可能会破坏系统中依赖这些旧版本的服务;
- 后续如果其他工具也需要使用这个新的SSL栈,需要单独编译或配置指向新的OpenSSL目录;
- 因为CentOS 6.9已经没有官方安全更新,你需要定期手动检查OpenSSL和curl的安全补丁,重新编译升级。
内容的提问来源于stack exchange,提问作者user3236169




