Как заставить xmlrpc-клиент ruby's игнорировать ошибки SSL-сертификата?
При доступе к службе XML-RPC с помощью xmlrpc/client
в ruby он выдает OpenSSL::SSL::SSLError
, когда сертификат сервера не является действительным. Как я могу заставить его игнорировать эту ошибку и продолжить соединение?
2 ответа:
Получается так:
xmlrpc = ::XMLRPC::Client.new("foohost") xmlrpc.instance_variable_get(:@http).instance_variable_set(:@verify_mode, OpenSSL::SSL::VERIFY_NONE)
Это работает с ruby 1.9.2, но явно тычет во внутренние устройства, поэтому реальный ответ: "API не предоставляет такого механизма, но вот Хак".
Фактически клиент обновлен, теперь у него есть прямой доступ к http-соединению: https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/41286/diff/lib/xmlrpc/client.rb
xmlrpc.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
Но лучше установить
ca_file
илиca_path
. Тем не менее, я не вижу возможности применить такую конфигурацию к вызовам_async
.Update: найдено обходное решение путем исправления объекта клиента:
Таким образом, вам нужно и то, и другое, более старый подход и исправление обезьяны. Добавим также экземпляр переменная, иначе новый метод не сможет увидеть действительное значение.xmlrpc_client.http.ca_file = @options[:ca_file] xmlrpc_client.instance_variable_set(:@ca_file, @options[:ca_file]) def xmlrpc_client.net_http(host, port, proxy_host, proxy_port) h = Net::HTTP.new host, port, proxy_host, proxy_port h.ca_file = @ca_file h end