2016-07-11 15 views
0

Ich habe Java-Web-Service unterstützt 2-Wege-SSL-Authentifizierung. So habe ich Client-Keystore (client.p12) mit Server-Zertifikat im vertrauenswürdigen Speicher und Server-Keystore mit Client-Zertifikat im vertrauenswürdigen Speicher.Ruby-Client für 2-Wege-ssl-Authentifizierung

Ich kann meinen Dienst einfach mit Browser oder Postboten (nur importieren client.p12 in Browser-Zertifikatsverwaltung) aufrufen, aber ich habe Probleme mit Ruby-Client.

Meine aktuelle Version:

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 

nicht mit:

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

Was mit meinem Client-Code ist falsch?

openssl s_client Ausgang:

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

Antwort

0

Sie müssen Ihre client.p12 Datei in Ihre nssdb Position importieren.

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 

Betten Sie diesen Curl-Call in Ihren Ruby-Client ein. Es wird klappen.

Hinweis: Wenn Sie eine andere ssl-Version verwenden, müssen Sie --tlsv1.0 zum curl Befehl

+0

Dies ist gut für Testzwecke. Aber die Skalierbarkeit wird ein Problem sein, wenn viele eingehende Anfragen kommen, wird Curl ausbrechen und es wird brechen. –

1

Die Möglichkeit, den Schlüssel für die Weitergabe ist nicht :ssl_cert_key, ist es :ssl_client_key. Macht das einen Unterschied?

+0

Bitte missbrauche nicht die Antwort-Funktion bitten um Klärung oder machen nicht hinzufügen Antwort Bemerkungen. Verwenden Sie stattdessen Kommentare dazu. Wenn Sie noch nicht kommentieren können, holen Sie sich den notwendigen Ruf, indem Sie bis dahin klare Fragen beantworten. – Magisch

+0

@Magisch ... Das ist eine Antwort. Der Code des Autors wird wegen des beschriebenen Problems nicht funktionieren. – alberge

+0

Nein, es ist keine Antwort. Seine aktuelle kaum ein Kommentar. Sie könnten es bearbeiten, um es zu einer Antwort zu machen, indem Sie den Fokus auf "macht das einen Unterschied" und vielleicht ersetzen Sie es mit "Versuchen Sie, ändern Sie Ihre Option für die Übergabe des Schlüssels an xy" jedoch. – Magisch