Измените версию ssl с помощью Net::HTTP и Ruby 1.8.7

Одно из моих устаревших приложений Ruby все еще использует Ruby 1.8.7. Он делает много HTTP-запросов к сторонним веб-сервисам, и некоторые из них выполняются через SSL.

Эти сторонние службы прекращают поддержку SSLv3 из-за уязвимости POODLE, и я хотел бы исправить свои клиенты, чтобы продолжать подключаться к ним.

Стандартная библиотека Ruby Net::HTTP, похоже, не имеет возможности изменить используемую версию SSL.

В Ruby openssl (ssl- internal.rb) есть способ изменить версию. К сожалению, это не раскрывается Net::HTTP (https .rb).

Неужели мы (пользователи Ruby 1.8.7) облажались?

Правка: на самом деле кажется, что клиент переключается на TLSv1, если сервер не поддерживает SSLv3. У меня есть веб-сайт с поддержкой SSL без поддержки SSLv3 за Nginx, и я убедился, что мой клиент 1.8.7 переключается на TLSv1, и запрос работает. Если вы хотите проверить это самостоятельно, посмотрите здесь: https://serverfault.com/questions/620123/how-can-i-let-nginx-log-the-used-ssl-tls-протокол-и-шифр


person jlecour    schedule 17.10.2014    source источник


Ответы (1)


На самом деле кажется, что клиент переключается на TLSv1, если сервер не поддерживает SSLv3.

Скорее наоборот. Внутри рукопожатия SSL клиент показывает серверу, что он может (протокол, шифры), и сервер затем выбирает из этого лучшее, что может. Обычно клиент просто по умолчанию использует SSLv23, который не ограничивает самого клиента определенным протоколом. Если сервер затем предлагает TLSv1, они будут продолжать его использовать, если сервер предлагает только SSLv3, они будут использовать SSL 3.0.

Если вы хотите запретить клиенту выбирать лучшее, но больше не разрешать SSL 3.0, посмотрите https://stackoverflow.com/a/24237525/3081018 о том, как отключить SSLv3, установив файл ssl_options.

person Steffen Ullrich    schedule 30.10.2014