Как я могу аутентифицировать веб-запрос http с сертификатом?

78
10

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


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

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

спросил(а) 2010-11-07T20:32:00+03:00 9 лет, 8 месяцев назад
1
Решение
67

Если используется базовая сеть /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 для деталей gory.

Но вкратце, что-то вроде этого должно работать:


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

.. и затем укажите контекст для вашего соединения.

ответил(а) 2010-11-07T23:15:00+03:00 9 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема