2016-07-11 10 views
0

私はJava Webサービスをサポートしています双方向SSL認証。だから私は信頼できるストア内のサーバー証明書と信頼できるストア内のクライアント証明書を持つサーバーキーストアを持つクライアントキーストア(client.p12)を持っています。2ウェイSSL認証のRubyクライアント

ブラウザ証明書管理でclient.p12をインポートするだけで簡単にサービスを呼び出すことができますが、私はrubyクライアントに問題があります。

私の現在のバージョン:私のクライアントコードと間違っている何

connect_nonblock': SSL_connect SYSCALL returned=5 errno=0 state=unknown state (OpenSSL::SSL::SSLError) 

require 'rest_client' 

p12 = OpenSSL::PKCS12.new(File.read('client.p12'), 'password') 

client = RestClient::Resource.new('https://localhost:8080/service', 
            :ssl_client_cert => p12.certificate, 
            :ssl_cert_key => p12.key, 
            :verify_ssl => OpenSSL::SSL::VERIFY_NONE, 
            :ssl_version => 'TLSv1_2', 
            :ssl_ciphers => 'ECDHE-RSA-AES128-GCM-SHA256').get 

がで失敗?

のopenssl s_client出力:

$ openssl s_client -connect localhost:8080 
.... 
SSL-Session: 
    Protocol : TLSv1.2 
    Cipher : ECDHE-RSA-AES128-GCM-SHA256 
... 

答えて

0

client.p12ファイルをnssdbにインポートする必要があります。

mkdir /root/nssdb 
pk12util -i /path-to/your/client.p12 -d /root/nssdb 
certutil -L -d /root/nssdb/ 
export SSL_DIR = /root/nssdb 

curl -X POST -H "Content-Type: text/xml" --data "#{xml}" --cert cert:password "https://localhost:8080/service" -v -k 
chmod -R 777 /root/nssdb 
chown -R user /root/nssdb 

このカールコールをRubyクライアントに埋め込みます。それが動作します。

注:別のSSLバージョンを使用している場合は、明確化のために頼むか、非作るために

+0

これはテスト目的に適しています。しかし、スケーラビリティは問題になります。多くの受信要求が来ると、Curlはタイムアウトになり、破損します。 –

1

オプションキーを渡すためには、それが:ssl_client_keyで、:ssl_cert_keyではありません。何か違いはありますか?

+0

応答機能を誤用しないでくださいcurlコマンドに--tlsv1.0を追加する必要があります解答その代わりにコメントを使用してください。あなたがまだコメントすることができない場合、それまで明確な質問に答えることによって、そうするために必要な評判を得る。 – Magisch

+0

@マジッシュ...これは答えです。記述された問題のため、著者のコードは機能しません。 – alberge

+0

いいえ、その答えではありません。その現在のほとんどのコメント。あなたは「これは違いを生み出しますか?」の焦点を取り除いて、「xyに鍵を渡すためのあなたのオプションを変更しよう」と置き換えて、それを編集することができます。 – Magisch

関連する問題