使用客户端证书和TLS_RSA_WITH_AES_256_CBC_SHA256密码套件

时间:2015-05-04 15:22:40

标签: ruby openssl

更新:我的许多问题都与不知道如何发布客户端证书有关。我已经放置了details over here

我使用Ruby连接到仅支持 TLS_RSA_WITH_AES_256_CBC_SHA256 密码的SSL服务器。我还需要提供客户证书。

当我查看来自OpenSSL::Cipher.ciphers的可用密码时, TLS_RSA_WITH_AES_256_CBC_SHA256 未列为选项。

如何将此密码添加到可用的密码?

谢谢!

这是我的代码:

  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 = ['AES256-SHA256']
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  http.ssl_version = :SSLv23
  request = Net::HTTP::Post.new(uri.request_uri)
  request.body = my_xml
  response = http.request(request)

我收到的错误:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read finished A: sslv3 alert handshake failure

检查数据包显示服务器终止时显示消息"握手失败(40)"这似乎是一个密码问题。

我没有从命令行连接,但这是openssl s_client的结果:

$ openssl s_client -connect dir-staging.surescripts.net:443 -tls1 -servername dir-staging.surescripts.net
CONNECTED(00000003)
depth=2 /C=US/O=Surescripts LLC./OU=Surescripts Certification Authorities/CN=Surescripts Root Certification Authority
verify error:num=19:self signed certificate in certificate chain
verify return:0
14089:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:1145:SSL alert number 40
14089:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:566:

2 个答案:

答案 0 :(得分:1)

根据openssl,这也称为“AES256-SHA256”。根据{{​​3}},AES256-SHA256被认为是不安全的,因此被禁用。该链接包含一个“补丁”以重新启用不安全的密码。

您可能希望向安全专业人员咨询有关您组织所涉及的风险的建议。

(编辑)错误“证书链中的自签名证书”必须为Ruby lang

答案 1 :(得分:0)

  

当我查看OpenSSL::Cipher.ciphers中的可用密码时,TLS_RSA_WITH_AES_256_CBC_SHA256未列为选项。

以下OpenSSL命令将为您列出相关密码:

$ openssl ciphers -v 'ALL:!RC4:!MD5:!aNULL' | grep AES256 | grep SHA256`.

结果是:

DHE-RSA-AES256-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA256
DHE-DSS-AES256-SHA256   TLSv1.2 Kx=DH       Au=DSS  Enc=AES(256)  Mac=SHA256
DH-RSA-AES256-SHA256    TLSv1.2 Kx=DH/RSA   Au=DH   Enc=AES(256)  Mac=SHA256
DH-DSS-AES256-SHA256    TLSv1.2 Kx=DH/DSS   Au=DH   Enc=AES(256)  Mac=SHA256
AES256-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA256

根据Is it possible to enable TLS v1.2 in Ruby? If so, how?,您接下来应尝试更改以下内容:

http.ssl_version = :SSLv23

要:

ctx = OpenSSL::SSL::SSLContext.new
ctx.ssl_version = :TLSv1_2
  

如何将此密码添加到可用的密码?

根据您的问题的编辑

$ openssl s_client -connect dir-staging.surescripts.net:443 -tls1 -servername dir-staging.surescripts.net

14089:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:1145:SSL alert number 40
14089:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:566:

OpenSSL 0.9.8 支持TLS 1.2。您应该转到OpenSSL 1.0.0或更高版本。 OpenSSL 1.0.2是最新版本,我们鼓励您使用它。