2011-04-29 782 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