2011-04-29 780 views
3

我在尝试使用在红宝石上有密码的证书时遇到了很多麻烦。我正在使用rest-client,但这不是必需的。如何使用带密码的PEM证书?

这是呼叫的卷曲相当于我需要做:

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 

我缺少什么?

回答

6

您使用选项-E使用卷曲的方式,您正在使用证书指定私钥。

(来自卷边手册页)

-E/- 证书

(SSL)告知卷曲使用指定 客户端证书文件得到一个 文件使用HTTPS时,FTPS或另一个 基于SSL的协议。证书 必须采用PEM格式。如果未指定可选的 密码,则将在终端上查询 。请注意, 此选项假设“证书” 文件是私钥和 专用证书连接!请参阅 --cert和--key单独指定它们。

因此,为了与RestClient做同样的事情,您可以尝试使用ssl_client_key选项。像:

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

哇,你是一个拯救生命的人!谢谢! – MarceloJ 2011-05-02 16:55:35