![](/img/trans.png)
[英]What kind of padding does Rails OpenSSL::Cipher use for AES-CBC-256?
[英]Use Client Cert and TLS_RSA_WITH_AES_256_CBC_SHA and other cipher suites
我正在与需要 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
更改http.ssl_version = :TLSv1_2
,以使其也允许 TLSv3?
谢谢你们的评论。 有效的密码是
proxy_request.ciphers = ["AES256-SHA:AES128-SHA:DES-CBC3-SHA"]
它出现在 Wireshark 中,就像
非常感谢你。 我注意到我给了一个客户端“你好”,但我从未在 Wireshark 中看到服务器你好,这与我得到的臭名昭著的错误相吻合
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 请求 - OpenSSL::SSL::SSLError: SSL_connect SYSCALL Returned=5 errno=0 state=SSLv3 read server hello A
他们支持的密码是:
TLS_RSA_WITH_AES_256_CBC_SHA SSL_RSA_WITH_3DES_EDE_CBC_SHA TLS_RSA_WITH_AES_128_CBC_SHA
和:
http.ciphers = ['need-to-figure-out']
您可以使用openssl ciphers
手册页将IANA 密码套件名称(如TLS_RSA_WITH_AES_128_CBC_SHA
映射到OpenSSL 密码字符串名称(如AES128-SHA
。 它是一个简单的查找 - 只需在页面上搜索 IANA 注册名称,您最终就会找到 OpenSSL 的名称。
我相信您应该使用的密码字符串是:
http.ciphers = ["AES256-SHA:AES128-SHA:DES-CBC3-SHA"]
...有谁知道我可以更改
http.ssl_version = :TLSv1_2
... 使其也允许 TLSv3 吗?
为此,在 OpenSSL 中,您需要设置上下文选项。 在Ruby中,你需要设置OpenSSL::SSL::SSL_OP_NO_SSLv2
通过OpenSSL::SSL::SSL_OP_NO_TLSv1_1
。 这将留下 TLS 1.2 和 TLS 1.3(当 TLS 1.3 可用时)。 另请参阅如何在 Ruby 中设置 TLS 上下文选项(如 OpenSSL::SSL::SSL_OP_NO_SSLv2) 。
TLS_RSA_WITH_*
方案是 RSA 密钥传输方案。 TLS 1.3 不会提供它们。 它们已被移除,以支持提供前向保密的方案。 提供前向保密的方案是 Diffie-Hellman 方案,如TLS_DHE_*
和TLS_ECDHE_*
。
即使是银行业也无法让IETF 改变决定。 IETF 坚持自己的立场。 我认为他们有时有点太随和了,这通常会导致安全性较弱。 但我认为他们在后下雪时代做出了正确的决定,我们对窥探和间谍活动的程度有了很好的了解。
在@jww 回答之后,有一个 ruby 库允许您将 OpenSSL 密码名称与 IANA / 标准 / RFC 名称进行映射:
require 'tls_map' # gem install tls-map
tm = TLSmap::App.new
tm.search(:openssl, 'AES128-SHA', :iana)
# => {:iana=>"TLS_RSA_WITH_AES_128_CBC_SHA"}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.