3

我在尝试使用在 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})

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

这是我总是得到的错误:

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

我错过了什么?

4

1 回答 1

6

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

(来自 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"),
于 2011-04-30T01:34:56.050 回答