I am working on an SSL Handshake with a server that requires TLSv1 and above.
They ciphers they support are:
TLS_RSA_WITH_AES_256_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
My current connection looks something like this:
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.cert = OpenSSL::X509::Certificate.new(File.read("my.cer"))
http.ca_file = 'their_root.cer'
http.ciphers = ['need-to-figure-out']
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ssl_version = :TLSv1_2
request = Net::HTTP::Post.new(uri.request_uri)
request.body = my_xml
response = http.request(request)
I need to figure out if Ruby supports these ciphers, since I can't find them in the listed ciphers using the puts OpenSSL::Cipher.ciphers
method, yet they are required in order to make this connection.
Also, does anyone know what I can change http.ssl_version = :TLSv1_2
to, to make it also allow TLSv3?
EDIT:
Thanks for all your comments. The cipher that works is
proxy_request.ciphers = ["AES256-SHA:AES128-SHA:DES-CBC3-SHA"]
And it shows up in Wireshark like
So thank you very much for that. I'm noticing that I am giving a client "Hello", but I never see a Server Hello in Wireshark, which coincides with the infamous error i'm getting
OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A
/Users/me/.rbenv/versions/2.1.6/lib/ruby/2.1.0/net/http.rb:927:in `connect'
Based on my wireshark, does anyone have any Idea what I am doing wrong?
You can see my script more fully in this question. Thanks in advance API Request - OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A
OpenSSL::Cipher.ciphers
is the list of available ciphers. This mapping of openssl cipher suite names to rfc names helped to narrow down what the name of each cipher is and they don't look to be supported. This documentation of ssl version doesn't showTLSv1_3
as being supported. – trueinViso