You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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.7NSS 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

火山引擎 最新活动