【发布时间】:2017-06-12 16:42:06
【问题描述】:
我正在与需要 TLSv1 及更高版本的服务器进行 SSL 握手。
他们支持的密码是:
TLS_RSA_WITH_AES_256_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
我当前的连接看起来像这样:
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)
我需要弄清楚 Ruby 是否支持这些密码,因为我无法使用 puts OpenSSL::Cipher.ciphers 方法在列出的密码中找到它们,但它们是建立这种连接所必需的。
另外,有谁知道我可以将 http.ssl_version = :TLSv1_2 更改为什么,以使其也允许 TLSv3?
编辑:
感谢您的所有 cmets。有效的密码是
proxy_request.ciphers = ["AES256-SHA:AES128-SHA:DES-CBC3-SHA"]
它像 Wireshark 一样显示在
非常感谢您。我注意到我正在给客户端“Hello”,但我从未在 Wireshark 中看到服务器 Hello,这与我遇到的臭名昭著的错误不谋而合
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'
根据我的wireshark,有人知道我做错了什么吗?
您可以在这个问题中更全面地了解我的脚本。提前致谢 API Request - OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A
【问题讨论】:
-
我不记得看到有关 Ruby 和客户端证书的问题。祝你好运。我在 Ruby 中做简单的 Security 101 事情变得如此沮丧,我不再使用它。另请参阅 How to set SSLContext options in Ruby 和 How to set TLS context options in Ruby (like OpenSSL::SSL::SSL_OP_NO_SSLv2)。
-
阅读ruby documentation,
OpenSSL::Cipher.ciphers是可用密码列表。这个mapping of openssl cipher suite names to rfc names 帮助缩小了每个密码的名称,并且它们看起来不受支持。 ssl 版本的This documentation 不显示TLSv1_3受支持。 -
@jww 您可能希望将此添加为答案。它可能不完全完整,但比一系列 cmets 更好。
-
非常感谢大家提供这些信息。是的,请将这些作为答案发布!我正在解析这些信息,并会及时通知您
-
嘿@jww 你的密码确实是正确的。如果您发布该答案,我将很乐意接受。我仍然遇到 Read Server Hello A Issue 的问题,我发布了 Edit。如果您添加答案,我将接受它并将我的编辑移至新问题,否则我将在此处继续。如果有人有任何想法,请告诉我。再次感谢。
标签: ruby-on-rails ruby ssl openssl net-http