繁体   English   中英

使用客户端证书和 TLS_RSA_WITH_AES_256_CBC_SHA 和其他密码套件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM