用于双向ssl身份验证的Ruby客户端

时间:2016-07-11 15:39:53

标签: ruby ssl rest-client

我有java web服务支持 2-way ssl auth 。所以我的客户端密钥存储区( client.p12 )在受信任存储区中具有服务器证书,在受信任存储区中具有客户端证书的服务器密钥存储区。

我可以使用浏览器或邮递员轻松调用我的服务(只需要在浏览器证书管理中导入 client.p12 )但我遇到ruby客户端问题。

我当前的版本:

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

失败了:

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

我的客户端代码出了什么问题?

openssl s_client输出:

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

2 个答案:

答案 0 :(得分:1)

传递密钥的选项不是function cron_action() { //some action here // Call again the function cron_action(); } cron_action(); ,而是:ssl_cert_key。这有什么不同吗?

答案 1 :(得分:-2)

您需要将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客户端中嵌入此curl调用。它会起作用。

  

注意:如果您使用的是其他ssl版本,则需要将-tlsv1.0添加到curl命令