【问题标题】:Change cipher on open connection在打开的连接上更改密码
【发布时间】:2016-09-29 12:10:12
【问题描述】:

我正在开发一个 SSL-Cipher-Scanner。这意味着我指定主机和端口,我的程序会告诉我主机接受哪些密码。

我当前的版本可以工作,但速度很慢(每台主机大约 20 到 30 秒),因为我为每个密码打开了一个新连接。

我使用以下方法(按此顺序):

ssl_ctx = SSL_CTX_new(method);
bio = BIO_new_ssl_connect(ssl_ctx);
BIO_set_conn_port(bio, port);
BIO_set_conn_hostname(bio, host);
BIO_get_ssl(bio, &ssl);
SSL_set_cipher_list(ssl, cipher);
BIO_do_connect(bio);
BIO_do_handshake(bio);

我现在尝试再次设置密码列表并再次握手而不是再次连接。在wireshark中,我看到它实际上使用了更改密码规范协议,但服务器返回了一个加密警报(所以我不能告诉你它是哪一个)。的返回值

SSL_set_cipher_list(ssl, cipher);

BIO_do_handshake(bio);

都是1所以应该是成功的。

谁能帮助我了解如何在打开的连接上更改使用的密码?

一些附加信息:我使用 openssl 版本 1.0.2h

【问题讨论】:

  • 查看sslscan 的源代码。它主要使用 OpenSSL 做同样的事情,但在工作流程中的时间与您尝试的时间不同。最初的项目前段时间被放弃了,但 GitHub 上有很多现代分支。
  • 警报已在旧密码套件中加密,因此您应该能够看到它是什么。它还表明服务器不支持请求的新密码套件。

标签: c ssl networking encryption openssl


【解决方案1】:

您所做的与renegotiation DOS attack 非常相似。服务器对可以进行多少重新协商有限制的情况并不少见。通常在初始 TLS 握手后不允许或只允许一次重新协商以防御此类 DOS 攻击。

【讨论】:

  • 好的,谢谢您的回答!你对我如何解决这个问题有什么建议吗?我的意思是工具 sslyze 可以在大约 5-8 秒内在同一台服务器上进行扫描,并且它有额外的 python 开销。
  • @Drilexus:从ALL 密码开始,然后删除任何成功的密码。 IE。如果你得到第一个AES-128,那么你的下一个密码集是ALL:!AES-128。一旦连接失败,您就知道所有相关密码都已检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
相关资源
最近更新 更多