如何使用带密码的PEM证书?

时间:2011-04-29 22:19:28

标签: ruby-on-rails ruby curl openssl rest-client

我在尝试使用在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 个答案:

答案 0 :(得分:6)

使用带有选项-E的curl的方式是指定带有证书的私钥。

(来自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"),