Почему Ruby не может проверить сертификат SSL?

Я впервые пытаюсь использовать библиотеку XMLRPC :: Client для взаимодействия с удаленным API, и я продолжаю получать эту ошибку:

warning: peer certificate won't be verified in this SSL session

При поиске я нашел множество люди, которые получили эту ошибку. Обычно это самозаверяющие сертификаты, и они просто хотят, чтобы он исчез, поэтому они делают что-то грязное, например, обезьяну, исправляют способ, которым XMLRPC :: Client открывает свой http-сеанс.

Сначала я предположил, что это просто клиент, не заботящийся о том, действителен сертификат или нет, поэтому я продолжил поиск и наткнулся на этот драгоценный камень . Он просто принудительно проверяет все сертификаты SSL и выдает серьезную ошибку, если это тоже не удается. Это было именно то, что я хотел. Я включил его, снова запустил код и теперь получаю следующее:

OpenSSL:SSL::SSLError:
  SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B:
  certificate verify failed

Конечно! Сертификат плохой! Но я дважды проверяю, чтобы убедиться, что встроенный s_client openssl выглядит так:

openssl s_client -connect sub.example.com:443

и что я получаю:

CONNECTED(00000003)
---
Certificate chain

Verify return code: 0 (ok)

Итак, теперь мы подошли к моему вопросу. OpenSSL (версия командной строки) говорит, что сертификат хорош. OpenSSL (библиотека Ruby) с этим не согласен. Все мои веб-браузеры говорят, что сертификат в порядке.

Несколько дополнительных деталей, которые могут быть полезны. Сертификат является подстановочным знаком, но действителен для домена. Openssl s_client был запущен на той же машине в секундах, кроме кода Ruby. Это Ruby 1.8.7 p357, установленный вместе с RVM.

Использует ли Ruby что-нибудь кроме пакета CA, предоставляемого ОС хоста? Есть ли способ указать Ruby использовать конкретный пакет CA или системный?

54
задан tshepang 22 February 2014 в 20:54
поделиться