当尝试使用Curl连接到启用HTTPS的旧网站时,出现以下错误:
curl https://10.11.1.44
curl: (35) error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol
更详细地说:
* Expire in 0 ms for 6 (transfer 0x55a4192abdd0)
* Trying 10.11.1.44...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55a4192abdd0)
* Connected to 10.11.1.44 (10.11.1.44) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (OUT), TLS alert, protocol version (582):
* error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol
* Closing connection 0
curl: (35) error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol
如果我尝试使用--ssl2
或--ssl3
选项,则会出现以下错误:
root@kali:~# curl https://10.11.1.44/ --sslv2
curl: (4) OpenSSL was built without SSLv2 support
root@kali:~# curl https://10.11.1.44/ --sslv3
curl: (4) OpenSSL was built without SSLv3 support
我已经咨询了以下页面,以了解如何使用SSL2 / 3支持构建Curl,但是我不确定如何启用它。
https://curl.haxx.se/docs/install.html
有什么想法吗?
答案 0 :(得分:2)
错误“ protocol version (582)
”表示服务器最多支持 TLSv1.0
。
TLSv1.0已deprecated,并且在最新发行版(例如Ubuntu 19 +,Debian Buster +)中被禁用。
指定--tlsv1.0
curl
参数无济于事,因为OpenSSL中已禁用协议。
要么升级您要连接的服务器(首选),
...或在TLSv1.0
中启用/etc/openssl.cnf
:
[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=2
更改为
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1
注意:SECLEVEL=1
启用SHA-1并允许RSA密钥小于2048位(可能需要连接到旧服务器)。
(无需重新编译任何内容)
答案 1 :(得分:1)
您将需要从源代码编译curl和ssl后端,显然您需要C编译器,可能还需要更多的东西,但是idk什么,希望它能涵盖它:
sudo apt-get install gcc build-essential make cmake autoconf git automake
这可能可以通过多个ssl后端完成,但是由于我最熟悉OpenSSL,因此我将继续使用OpenSSL,以构建openssl转到https://github.com/openssl/openssl处的openssl存储库,并找到合适的openssl版本,在此示例中,我选择了1.1.1c
版(这是撰写本文时最新的稳定的openssl发行版),
git clone -b 'OpenSSL_1_1_1c' --single-branch --depth 1 https://github.com/openssl/openssl
cd openssl
./config no-shared enable-ssl2 enable-ssl3 enable-ssl3-method
make -j $(nproc)
(最后一步可能要花一些时间),但是openSSL的构建脚本不会创建lib文件夹,但是curl的构建脚本期望lib文件位于openssl文件夹内的lib文件夹中,因此在make之后,运行>
mkdir lib
cp *.a lib;
一旦完成,就该卷曲了,所以cd ..
在那里克隆出最新版本的curl,在本例中,我使用curl 7.65.0
(撰写本文时,最新的curl发行版),
git clone -b 'curl-7_65_0' --single-branch --depth 1 https://github.com/curl/curl.git
cd curl
./buildconf
LDFLAGS="-static" ./configure --with-ssl=$(realpath ../openssl) --disable-shared --enable-static
make -j $(nproc)
((如果您怀疑我为什么使用realpath:curl的buildscript中似乎存在一个错误,如果您提供相对路径,它会失败,因此似乎是绝对路径)。如果您想知道为什么我做了一个static,构建aka --disable-shared --enable-static,您的$ PATH中可能有一个不同的libopenssl库,因此为了避免与ubuntu的内置libopenssl发生冲突,静态构建会更安全。)
最后
/temp2/curl# ./src/curl --sslv3 https://google.com
curl: (35) error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
(因为https://google.com完全不再支持sslv3。)