У меня есть тестовая среда, которая использует Ruby для управления сервером через https-соединение. Поскольку последние версии Ruby отказываются подключаться к https-серверу с недействительным сертификатом (см. этот мой предыдущий вопрос ), и я хотел бы начать использовать более новую версию Ruby, я пытаюсь настроить действующий сертификат.
Я создал сертификат CA для использования (тестируется несколько серверов, поэтому это кажется более простым способом) и успешно использовал его для подписания нового сертификата, который был установлен на сервере и используется. Я добавил сертификат CA в магазин браузера, и теперь он (браузер) без жалоб будет подключаться к серверу. Поэтому я уверен, что мои сертификаты действительны и настроены правильно.
Я знаю, что Ruby не использует то же хранилище, что и браузер. Я использовал доступный CA-файл здесь для проверки подключения к другим (общедоступным) серверам (установлен с помощью метода Net :: HTTP # ca_file =
), и это тоже работает.
Я не могу заставить Ruby подключиться к моему серверу с помощью моего сертификата. Я пробовал различными способами указать его на свой сертификат (включая добавление моего сертификата в файл, указанный выше), и он всегда дает одну и ту же ошибку:
SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A (OpenSSL::SSL::SSLError)
Что мне нужно сделать, чтобы убедить Ruby принять мой сертификат и подключиться к моему сервер?
Я использую следующий код:
require 'net/https'
uri = URI.parse("https://hostname/index.html")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ca_file = "My CA cert file"
request = Net::HTTP::Get.new(uri.path)
response = http.request(request)
Я предполагаю, что это что-то не так. Я хочу знать, что мне делать, чтобы использовать свой сертификат CA?