Ruby 用于 2 路 ssl 身份验证的客户端
Ruby client for 2-way ssl authentication
我有 java 网络服务支持 2 路 ssl 身份验证。所以我有客户端密钥库(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
...
传递密钥的选项不是:ssl_cert_key
,而是:ssl_client_key
。这有什么区别吗?
您需要将 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
将此 curl 调用嵌入到您的 ruby 客户端中。它会起作用。
Note: If you are using a different ssl version you need to add --tlsv1.0 to the curl command
我有 java 网络服务支持 2 路 ssl 身份验证。所以我有客户端密钥库(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
...
传递密钥的选项不是:ssl_cert_key
,而是:ssl_client_key
。这有什么区别吗?
您需要将 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
将此 curl 调用嵌入到您的 ruby 客户端中。它会起作用。
Note: If you are using a different ssl version you need to add --tlsv1.0 to the curl command