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

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

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

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

В рубине 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-protocol-and-ciphersuite

1 ответ

Решение

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

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

Если вы хотите ограничить выбор лучшего клиента, но не разрешаете SSL 3.0, посмотрите на /questions/27105275/kak-ustanovit-parametryi-konteksta-tls-v-ruby-naprimer-opensslsslsslopnosslv2/27105282#27105282 как отключить SSLv3, установив ssl_options.

Другие вопросы по тегам