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




