【问题标题】:Ruby client for 2-way ssl authentication用于 2 路 ssl 身份验证的 Ruby 客户端
【发布时间】:2016-07-11 15:39:52
【问题描述】:

我的 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
...

【问题讨论】:

    标签: ruby ssl rest-client


    【解决方案1】:

    传递密钥的选项不是:ssl_cert_key,而是:ssl_client_key。这有什么不同吗?

    【讨论】:

      【解决方案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 版本,则需要在 curl 命令中添加 --tlsv1.0

      【讨论】:

      • 这有利于测试目的。但是可扩展性将是一个问题,当大量传入请求到来时,Curl 会超时并且会中断。
      猜你喜欢
      • 1970-01-01
      • 2014-04-04
      • 2014-09-15
      • 2014-11-13
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多