Как я могу заставить клиент xmlrpc ruby игнорировать ошибки 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
поэтому вам нужны оба, более старый подход и обезьяна латает. Мы также добавляем переменную экземпляра, иначе новый метод не сможет увидеть фактическое значение.