Как я могу аутентифицировать веб-запрос http с помощью сертификата? - PullRequest
3 голосов
/ 07 ноября 2010

Мне нужно иметь возможность отправлять запрос http get в веб-службу, которая требует, чтобы клиенты проходили аутентификацию с определенным сертификатом. Код .net выглядит следующим образом:

if (certificate != null) 
    request.ClientCertificates.Add(certificate); 
return request; 

Я не смог найти эквивалент в рельсах. Есть предложения?

1 Ответ

3 голосов
/ 07 ноября 2010

Если использовать базовую сеть / https, то все довольно просто:

require 'net/https'
require 'uri'

uri = URI.parse(ARGV[0] || 'https://localhost/')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == "https"  # enable SSL/TLS
http.key = pkey #Sets an OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.
http.cert= cert #Sets an OpenSSL::X509::Certificate object as client certificate

http.start {
  http.request_get(uri.path) {|res|
    print res.body
  }
}

Если вы объедините их, вам придется помассировать их, используя некоторые служебные методы openssl.

Для пользовательского http-клиента вы должны прочитать документы для библиотеки ruby ​​openssl для подробностей.

Но, в двух словах, что-то вроде этого должно работать:

ctx = OpenSSL::SSL::SSLContext.new
ctx.key = private_key_file
ctx.cert = certificate_file

.. и затем предоставьте контекст для вашего соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...