You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

CentOS 5.7下Curl SSL验证问题(绕过验证无效)

解决CentOS 5.7下GitHub脚本安装SSL证书的curl错误问题

首先得明确:CentOS 5.7是早已停止官方支持的老旧系统,自带的OpenSSL 0.9.8e不仅不支持现代TLS协议(GitHub现在要求至少TLS 1.2),还存在不少未修复的安全漏洞——不过你提到的心脏出血漏洞是OpenSSL 1.0.1-1.0.1f的问题,0.9.8系列不受影响,这点可以放心。

你的两个curl错误根源不同:

  • curl error 60:本地CA证书 bundle 太旧,无法验证GitHub的SSL证书
  • curl error 35:OpenSSL版本过低,不支持GitHub要求的TLS握手协议(TLS 1.2+),即使关闭证书验证(insecure参数)也无法建立SSL连接

下面是一步步的解决方案:

1. 升级OpenSSL到0.9.8系列的最新安全版本

我们选择OpenSSL 0.9.8zh(0.9.8分支的最后安全维护版本,修复了已知漏洞且无心脏出血风险),手动编译安装:

# 下载源码包
wget https://www.openssl.org/source/old/0.9.x/openssl-0.9.8zh.tar.gz
tar zxf openssl-0.9.8zh.tar.gz
cd openssl-0.9.8zh

# 配置编译参数,指定安装路径并启用zlib压缩
./config --prefix=/usr/local/openssl shared zlib
make && make install

# 替换系统旧版OpenSSL
mv /usr/bin/openssl /usr/bin/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

# 配置动态库加载路径
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf.d/openssl.conf
ldconfig

# 验证版本
openssl version

执行后应该显示OpenSSL 0.9.8zh 14 Jan 2020

2. 重新编译curl以适配新的OpenSSL

CentOS 5.7自带的curl是链接旧版OpenSSL的,需要重新编译:

# 下载兼容0.9.8的curl版本(选7.47.0,这个版本对旧OpenSSL支持较好)
wget https://curl.se/download/curl-7.47.0.tar.gz
tar zxf curl-7.47.0.tar.gz
cd curl-7.47.0

# 配置编译,指定使用新安装的OpenSSL
./configure --prefix=/usr/local/curl --with-ssl=/usr/local/openssl
make && make install

# 替换系统旧版curl
mv /usr/bin/curl /usr/bin/curl.old
ln -s /usr/local/curl/bin/curl /usr/bin/curl

# 验证curl的SSL支持
curl -V

输出中应该看到SSL: OpenSSL/0.9.8zh

3. 更新CA证书 bundle

即使升级了OpenSSL,旧的CA证书还是无法验证新的网站证书,所以替换系统的CA bundle:

# 下载最新的CA证书
wget https://curl.se/ca/cacert.pem

# 备份旧证书并替换
mv /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-bundle.crt.old
cp cacert.pem /etc/pki/tls/certs/ca-bundle.crt

4. 测试连接

现在尝试连接GitHub,验证问题是否解决:

curl -v https://github.com

如果能正常返回网页内容,说明SSL连接已正常工作,此时再运行你的GitHub安装脚本应该就不会报错了。

重要提醒

CentOS 5.7已经停止安全更新超过10年,系统中存在大量未修复的高危漏洞,强烈建议尽快迁移到受支持的操作系统(比如CentOS 7/8、Rocky Linux、AlmaLinux等),这才是解决所有安全问题的根本方案。

内容的提问来源于stack exchange,提问作者user

火山引擎 最新活动