Вопрос или проблема
У меня проблема с Jmeter Curl. У меня есть файл .sh
, который содержит команду curl, и этот файл sh вызывается с использованием OS Process Sampler.
Команда .sh
содержит
curl -kvH "Accept: application/json" https://www.rocketleaguereplays.com/api/replays/-1/
Но я получаю ошибку
* Adding handle: conn: 0x75e6e0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x75e6e0) send_pipe: 1, recv_pipe: 0
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* About to connect() to www.rocketleaguereplays.com port 443 (#0)
* Trying 104.24.115.83...
* Connected to www.rocketleaguereplays.com (104.24.115.83) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
} [data not shown]
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* SSLv3, TLS alert, Server hello (2):
{ [data not shown]
* error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
* Closing connection 0
curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
С какой ОС вы подключаетесь?
Скорее всего, у вас устаревшие библиотеки libssl, поэтому вы не можете подключиться к узлу, который поддерживает только недавние версии TLS.
Ответ или решение
Теория
Ошибка error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
указывает на проблему при установке SSL/TLS соединения между клиентом и сервером. Эта ошибка происходит во время фазы "рукопожатия" (handshake), когда сервер отправляет предупреждение клиенту, что он не может установить соединение с этим SSL-протоколом. Эта проблема обычно вызвана одной из нескольких причин: устаревший протокол SSL (SSLv3) или TLS версии, неподдерживаемый современным сервером, либо несовместимость шифров (ciphers) между клиентом и сервером.
Современные веб-серверы часто отключают поддержку устаревших протоколов, таких как SSLv3 и даже некоторых старых версий TLS (например, TLS 1.0 и 1.1), по причинам безопасности. Безопасные соединения играют критическую роль в защите данных пользователей и предотвращении атак типа MitM (срединного человека), которые могут перехватить или изменить передаваемые данные.
Пример
В вашем случае вы используете JMeter, который через OS Process Sampler вызывает curl
команду из скрипта .sh
. Вы пытаетесь установить соединение с https://www.rocketleaguereplays.com/api/replays/-1/
, но получаете обратное сообщение об ошибке от сервера про несоответствие протокола, указывающее на проблему с настройками SSL/TLS.
Ошибка, которую вы видите, возникает, когда клиентская программа пытается использовать старый протокол (в данном случае SSLv3), который сервер уже не поддерживает. Сервер посылает ответ "рукопожатие не удалось" – это сообщение, которое вы наблюдаете. В результате соединение закрывается и ваше приложение выводит сообщение об ошибке.
Применение
Чтобы исправить эту ситуацию, вы должны убедиться, что используете совместимый с сервером протокол. Следуйте этим рекомендациям для решения проблемы:
-
Обновление библиотек SSL: Убедитесь, что в вашей системе установлены последние версии библиотек OpenSSL или аналогичных, обеспечивающих актуальную поддержку современных версий TLS. Вы можете использовать команду:
sudo apt-get update && sudo apt-get upgrade -y
-
Обновление
curl
: Убедитесь, что вы используете последнюю версиюcurl
, так как старые версии могут не поддерживать современные TLS. Проверьте и обновитеcurl
:sudo apt-get install --only-upgrade curl
-
Изменение команды
curl
: Убедитесь, чтоcurl
использует нужные версии TLS. Это можно сделать, добавив флаг--tlsv1.2
(или--tlsv1.3
, если он поддерживается):curl -kv --tlsv1.2 -H "Accept: application/json" https://www.rocketleaguereplays.com/api/replays/-1/
-
Проверка шифров: Если ошибка сохраняется, удостоверьтесь, что используемые шифры соответствуют тем, которые поддерживает сервер. Это можно сделать, указав флаг
--ciphers
с нужными шифровыми наборами. -
Логи сервера: Если у вас есть доступ к логам сервера, проверьте их на предмет более точных деталей о том, почему соединение отклоняется. Это может дать больше указаний о том, какие версии TLS или шифры требуются.
-
Конфигурация JMeter: Убедитесь, что JMeter и его компоненты используют совместимые версии библиотек JSSE или аналогичных для установления SSL-соединений. Для этого проверьте ваши настройки конфигурации и, если необходимо, переключитесь на использование более новых комплектаций, которые поддерживают нужные версии TLS.
Следуя этим инструкциям, вы устраняете несовместимость между клиентом и сервером, обеспечив успешное установление безопасного соединения. Безопасность соединений играет большую роль в защите данных, и важно поддерживать программное обеспечение в актуальном состоянии, соответствуя современным стандартам безопасности.