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

Mar*_*loJ 3 ruby curl openssl ruby-on-rails rest-client

我在尝试使用在ruby上有密码的证书时遇到了很多麻烦.我正在使用rest-client,但这不是必需的.

这是我需要进行的cURL等效调用:

curl -E certificate.pem:PASSWORD -d ident=language -d data="test" "https://theurl" 
Run Code Online (Sandbox Code Playgroud)

我尝试了很多东西,但我无法让密码部分工作.这是我到目前为止所拥有的:

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

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

我已经尝试将密码放在任何地方,如:密码和:ssl_client_key,我查看了我能找到的所有文档但是没有任何地方可以接受这个密码.

这是我总是得到的错误:

SSL_connect returned=1 errno=0 state=SSLv3 read finished A: sslv3 alert handshake failure
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

the*_*fme 6

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

(来自cURL手册页)

-E/ - 证书

(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"),
Run Code Online (Sandbox Code Playgroud)