【问题标题】:Use Client Cert and TLS_RSA_WITH_AES_256_CBC_SHA256 cipher suite使用客户端证书和 TLS_RSA_WITH_AES_256_CBC_SHA256 密码套件
【发布时间】:2015-07-14 01:19:53
【问题描述】:

更新:我的许多问题都与不知道如何发布客户端证书有关。我已经放置了那些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:

【问题讨论】:

  • 我正在尝试连接到现有的私人服务,但似乎无法配置 SSL 以使其工作。
  • 编辑了我的答案,但现在真的是 2 个问题。
  • @steenslag 我不知道问题是密码还是其他问题。 jww 指出了 openssl 命令行的一些问题,但还没有高兴。
  • @Tom - 与 http.cert = OpenSSL::X509::Certificate.new(File.read("my.cer")) 相关...您在哪里设置与证书一起使用的密钥?我认为你需要一个http.key 在某个地方......
  • @jww 那是从哪里来的?我用来创建 CSR 的密钥文件?

标签: ruby openssl


【解决方案1】:

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

您可能希望就贵组织所涉及的风险向安全专家寻求建议。

(编辑)错误“证书链中的自签名证书”需要taken care

【讨论】:

  • 我知道你只是个信使,但是...... AES256-SHA256 没有任何问题。 POODLE 是针对浏览器等用户代理的 CSRF。 (由于其安全模型和设计原则,浏览器是出了名的不安全)。其他用户代理不易受影响。您可以在 TKS 工作组的Rethink TLS 1.3 上找到关于它的很好的讨论。并且 Ruby 启用了 RC4,我们知道它很弱而且很受伤。对我来说,这看起来像是更多的 Ruby 安全漏洞。
【解决方案2】:

当我查看来自 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 是最新的,我们鼓励您使用它。

【讨论】:

  • 我升级了 openssl 并重新运行了该命令:gist.github.com/tomrossi7/030f95513390edce3042 我还更新了我的代码:gist.github.com/tomrossi7/3c8d564fedfd22249b3c。仍然无法通过
  • 查看这些要点。不幸的是,我无法控制该服务器,它被 IP 锁定。
  • @Tom - 它看起来像是与服务器或其配置有关的问题。您可以连接、执行密钥交换,然后获得主密钥。然后,您莫名其妙地收到警报 40。他们想要客户端证书吗?
  • 是的,他们想要一个客户端证书。如何使用 openssl 命令传递它?你可以在我的 ruby​​ 代码中看到它。
  • @Tom -Damn,我错过了....对此感到抱歉。对于s_client,尝试-cert 选项以通过证书。您还需要-key 选项(以及-certfom-keyform)。这是manpage on s_client
猜你喜欢
  • 2017-06-12
  • 2018-03-10
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
相关资源
最近更新 更多