Posiadam:
- certyfikat CA
- certyfikat X509
- klucz prywatny RSA
po użyciu patcha do XMLRPC::Client, który umożliwia połączenie z wykorzystaniem certyfikatów, przy próbie połączenia otrzymuję komunikat błędu.
key = OpenSSL::PKey::RSA.new File.open('/.../private/key.pem')
cert = OpenSSL::X509::Certificate.new File.open('/.../cert/cert.crt')
conn = XMLRPC::Client.new 'webservice_host', 'webservice_path', 'webservice_port', nil, nil, nil, nil, true, nil, '/../ca.pem', cert, key
conn.call(...)
treść błędu:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server hello B: serverhello tlsext
from /.../lib/ruby/1.9.1/net/http.rb:799:in `connect'
from /.../lib/ruby/1.9.1/net/http.rb:799:in `block in connect'
from /.../lib/ruby/1.9.1/timeout.rb:54:in `timeout'
from /.../lib/ruby/1.9.1/timeout.rb:99:in `timeout'
from /.../lib/ruby/1.9.1/net/http.rb:799:in `connect'
from /.../lib/ruby/1.9.1/net/http.rb:755:in `do_start'
from /.../lib/ruby/1.9.1/net/http.rb:744:in `start'
from /.../lib/ruby/1.9.1/net/http.rb:1284:in `request'
from /.../lib/ruby/1.9.1/net/http.rb:1195:in `request_get'
from (irb):23
from /.../lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:47:in `start'
from /.../lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:8:in `start'
from /.../lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
Drugie co próbowałem to próbowałem przetestować połączenie z serwerem na którym stoi webservice, poprzez pobranie pliku za pomocą rubiego:
require 'net/https'
https = Net::HTTP.new('host', port)
https.use_ssl = true
https.ca_file = '/../ca.pem'
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.verify_depth = 5
https.cert = OpenSSL::X509::Certificate.new File.open('/.../cert/cert.crt')
https.key = OpenSSL::PKey::RSA.new File.open('/.../private/key.pem')
https.request_get('/.../test.txt')
treść błędu:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server hello B: serverhello tlsext
from /.../lib/ruby/1.9.1/net/http.rb:799:in `connect'
from /.../lib/ruby/1.9.1/net/http.rb:799:in `block in connect'
from /.../lib/ruby/1.9.1/timeout.rb:54:in `timeout'
from /.../lib/ruby/1.9.1/timeout.rb:99:in `timeout'
from /.../lib/ruby/1.9.1/net/http.rb:799:in `connect'
from /.../lib/ruby/1.9.1/net/http.rb:755:in `do_start'
from /.../lib/ruby/1.9.1/net/http.rb:744:in `start'
from /.../lib/ruby/1.9.1/net/http.rb:1284:in `request'
from /.../lib/ruby/1.9.1/net/http.rb:1195:in `request_get'
from (irb):23
from /.../lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:47:in `start'
from /.../lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:8:in `start'
from /.../lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
Ostatnią rzeczą, którą sprawdziłem to pobranie pliku za pomocą programu wget, to zakończyło się sukcese, tzn sprawdzanie ccertyfikatu, które ustawione jest przed wejściem na serwer przeszło bez problemu
wget --certificate=/.../cert/cert.crt --private-key=/.../private/key.pem --ca-certificate=/../ca.pem -O /tmp/x https://host/.../test.txt
Z tego wynika, że robię coś źle w kodzie Rubiego, niestety nie mam pojęcia jakby to można inaczej ugryźć. Będę wdzięczny za pomoc.