Как скомпилировать Curl с устаревшей поддержкой SSL в Ubuntu? - PullRequest
1 голос
/ 30 мая 2019

У меня возникает следующая ошибка при попытке подключиться к старому веб-сайту с поддержкой HTTPS с помощью Curl:

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

Я проконсультировался на следующей странице о том, как построить Curl с поддержкой SSL2 / 3, но я не уверен, какчтобы включить его?

https://curl.haxx.se/docs/install.html

Есть идеи?

1 Ответ

1 голос
/ 31 мая 2019

вам нужно будет скомпилировать как curl, так и ваш ssl-бэкэнд из исходного кода, очевидно, вам понадобится компилятор C и, возможно, больше материала, но не знаю, что, надеюсь, это должно охватить:

sudo apt-get install gcc build-essential make cmake autoconf git automake

это, вероятно, можно сделать с несколькими бэкэндами ssl, но, поскольку я наиболее знаком с OpenSSL, я перейду к OpenSSL, чтобы собрать openssl, перейдите в репозиторий openssl по адресу https://github.com/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 будут находиться в папке lib внутри папки openssl, поэтому после make выполните команду

mkdir lib
cp *.a lib;

как только это будет сделано, пришло время сделать curl, поэтому 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: в buildscript curl, по-видимому, есть ошибка, которая приводит к сбою, если вы указываете относительный путь, поэтому требуется абсолютный путь, кажется. Если вам интересно, почему я сделал статический build aka --disable-shared --enable-static, у вас может быть другая библиотека libopenssl в вашем $ PATH, поэтому во избежание конфликта со встроенным в 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.)

...