Я впервые пытаюсь использовать библиотеку 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 или системный?