Как я могу использовать сертификат PEM с паролем? - PullRequest
3 голосов
/ 30 апреля 2011

У меня много проблем при попытке использовать сертификат с паролем на ruby. Я использую rest-client, но это не обязательно.

Это cURL-эквивалент звонка, который мне нужно сделать:

curl -E certificate.pem:PASSWORD -d ident=language -d data="test" "https://theurl" 

Я пробовал много вещей, но не могу заставить работать парольную часть. Вот что у меня есть:

cert = OpenSSL::X509::Certificate.new(File.read("#{RAILS_ROOT}/certificate.pem"))

reply = RestClient.post("https://theurl", {:ident => 'language', :data => 'test'}, {:ssl_client_cert => cert})

Я пытался разместить пароль везде, как: пароль и: ssl_client_key, я просмотрел всю документацию, которую смог найти, но нигде не будет такой пароль.

Это ошибка, которую я всегда получаю:

SSL_connect returned=1 errno=0 state=SSLv3 read finished A: sslv3 alert handshake failure

Чего мне не хватает?

1 Ответ

6 голосов
/ 30 апреля 2011

При использовании curl с опцией -E вы указываете закрытый ключ с сертификатом.

(со страницы справочника cURL)

-E / -cert

(SSL) Указывает curl использовать указанный файл сертификата клиента при получении файла с HTTPS, FTPS или другим протоколом на основе SSL.Сертификат должен быть в формате PEM.Если дополнительный пароль не указан, он будет запрошен на терминале.Обратите внимание, что эта опция предполагает наличие файла «сертификата», который является закрытым ключом и закрытым сертификатом!См. --Cert и --key, чтобы указать их независимо.

Таким образом, чтобы сделать то же самое с RestClient, вы можете попробовать использовать опцию ssl_client_key.Нравится:

:ssl_client_key   =>  OpenSSL::PKey::RSA.new(File.read("key.pem"), "passphrase, if any"),
...