如何在Ubuntu上编译支持旧版SSL的Curl?连接旧站点遇SSL错误
解决curl连接旧HTTPS网站的SSL协议不支持问题
你遇到的curl: (4) OpenSSL was built without SSLv2 support和ssl_choose_client_version:unsupported protocol错误,本质是现代Linux发行版(比如Kali)默认的OpenSSL已经移除了SSLv2/3的支持——这些协议早就被认定为不安全,所以官方默认禁用了。但要访问只能用这些旧协议的网站,就得自己编译一套带SSLv2/3支持的OpenSSL和curl,具体步骤如下:
1. 安装编译所需依赖
首先确保你的系统有编译源码的基础工具:
sudo apt update && sudo apt install build-essential wget
2. 编译支持SSLv2/3的OpenSSL
新版OpenSSL(1.1.0及以上)已经彻底移除了SSLv2/3,所以我们需要用最后支持这些协议的稳定版——OpenSSL 1.0.2u:
# 下载源码包 wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz tar xzf openssl-1.0.2u.tar.gz cd openssl-1.0.2u # 配置编译选项,启用SSLv2/3,指定安装到自定义目录避免覆盖系统默认OpenSSL ./config enable-ssl2 enable-ssl3 --prefix=/usr/local/openssl-legacy shared zlib # 编译并安装(-j$(nproc)是利用多CPU加速编译) make -j$(nproc) sudo make install
3. 编译curl并链接自定义OpenSSL
接下来编译curl,让它使用我们刚编译的旧版OpenSSL,而不是系统默认的:
# 回到上级目录,下载兼容OpenSSL 1.0.2的curl版本(比如7.71.1) cd .. wget https://curl.se/download/curl-7.71.1.tar.gz tar xzf curl-7.71.1.tar.gz cd curl-7.71.1 # 配置curl,指定使用自定义OpenSSL路径 ./configure --with-openssl=/usr/local/openssl-legacy --prefix=/usr/local/curl-legacy # 编译安装 make -j$(nproc) sudo make install
4. 测试使用自定义curl
现在你可以用这个编译好的curl来访问旧网站了:
# 尝试SSLv2协议 /usr/local/curl-legacy/bin/curl https://10.11.1.44 --sslv2 # 尝试SSLv3协议 /usr/local/curl-legacy/bin/curl https://10.11.1.44 --sslv3
⚠️ 重要提醒:SSLv2和SSLv3存在严重的安全漏洞(比如POODLE),这个自定义的curl只能用于访问必须使用这些协议的旧网站,平时不要用它处理其他安全的HTTPS请求,避免暴露风险。
内容的提问来源于stack exchange,提问作者Shuzheng
相关产品推荐
相关产品推荐

