Подтвердить что ты не робот

OpenSSL:: SSL:: SSLError: SSL_connect SYSCALL return = 5 errno = 0 state = SSLv3 читать сервер привет

В приведенном ниже коде приведена следующая ошибка: OpenSSL:: SSL:: SSLError: SSL_connect SYSCALL return = 5 errno = 0 state = SSLv3 читать сервер привет A

require 'net/https'
uri = URI.parse("https://<server>.com")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.ssl_version = 'SSLv3'
http.get(uri.request_uri)

Любая идея, почему? Я пробовал все, что упоминалось во всех других вопросах, но пока не повезло.

  • Ruby 1.9.3p484 (версия 2013-11-22 версия 43786) [x86_64-darwin13.3.0]
  • OpenSSL 0.9.8y 5 февраля 2013 г.

Обновление I

Пробовал следующее:

  • Ruby 2.0.0p353 (версия 2013-11-22 43784) [x86_64-darwin13.3.0]
  • OpenSSL 1.0.1i 6 августа 2014 г.

Обновление II

  • Вынужденный ssl_version для: TLSv1_2

По-прежнему не повезло.

Обновление III

Хорошо, вот окончательный код - спасибо Steffen (см. ответ ниже):

require 'net/https'
uri = URI.parse("https://<server>.com")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.ssl_version = :TLSv1
http.ciphers = ['RC4-SHA']
http.get(uri.request_uri)

Я сомневаюсь, что мой вопрос будет иметь отношение к кому-либо еще, поскольку он был связан с удаленным неправильно сконфигурированным сервером.

4b9b3361

Ответ 1

Это проблема на сервере. Похоже, что сервер исключительно принимает TLS 1.2 и не показывает обычного поведения, когда клиент запрашивает что-то меньшее (например, понижение или отправка SSL-оповещения), но вместо этого просто закрывает соединение.

TLS 1.2 не поддерживается OpenSSL 0.9.8, и, кроме того, ваш код обеспечивает SSLv3. Вы получаете TLS 1.2 только при обновлении до OpenSSL 1.0.1.

Некоторые браузеры также не смогут подключиться к этому серверу, даже если у них есть способы работать с такими сломанными серверами. Но в то время как Firefox будет только пытаться понизить подключение к меньшей версии SSL (что часто помогает) Chrome удается подключиться к TLS 1.2.

Изменить: я еще раз проанализировал проблему, и теперь я больше не могу подключиться к TLS1.2, но я могу получить соединение с TLS1.0 или SSL3.0, но только если шифры жестко закодированы для RC4- ША. Я пробовал других, таких как AES128-SHA или DES-CBC3-SHA, и они не работают. Поэтому, хотя это выглядит как действительно запутанная система, явно устанавливающая

http.ssl_version = 'TLSv1'       -- or SSLv3, but TLSv1 is better
http.ssl_cipher = 'rc4-sha'

должен работать. Я не рубиновый пользователь, поэтому точный синтаксис может отличаться, но я тестировал его с помощью OpenSSL s_client.

Ответ 2

Решение состоит в обновлении до openssl 1.0.2g-1​ubuntu4.6 (от 1.0.1f-1​ubuntu2.21) (например, от cedar-14 до heroku-16).

heroku stack:set heroku-16 -a your-app

И в app.json:

{
  ...
  "stack": "heroku-16",
  ...
}

Ответ 3

Для Fastlane попробуйте это,

brew install ruby
gem install fastlane

См. ссылка