openssl安全重新协商(不支持)

我正在运行在Ubuntu 14.04 LTS服务器上实现的Web服务。 我在使用openssl version 0.9.7m的客户端和使用openssl 1.0.1f的服务器之间debugging了一段时间之后的 TLSv1 连接中断 。 我自己没有访问客户端的权限,只能访问服务器和路由器。 当我运行openssl s_server代替服务器时,我看到客户端连接时secure renegotiation not supported消息secure renegotiation not supported 。 重新谈判并不一定与连接问题有任何关系,但我试图理解重新谈判。 到目前为止,我还没能find以下问题的答案:

  1. 什么是重新谈判的典型触发器? 如果安全协商不被支持,它是不安全的吗?
  2. 重新协商是由客户端还是服务器端的代码启动,还是可以在某个时候启动?
  3. 有没有办法强制与openssl s_server和/或openssl s_client进行实验呢?

有四种types的重新谈判可能:

  • 客户端启动的安全重新协商
  • 客户端启动的不安全重新协商
  • 服务器启动的安全重新协商
  • 服务器启动的不安全重新协商

自从发现执行重新协商攻击的可能性( CVE-2009-3555 )是一种存在于所有当前版本的“TLS”上的漏洞,假设重新协商不会安全地执行,除非客户端和服务器都实施TLS重新谈判指示扩展 。

OpenSSL的第一反应就是禁用重新协商 , 在以后的版本中实施安全的重新协商。

根据定义,使用0.9.7m的客户端CVE-2009-3555之前的版本,既易受此攻击,又无法执行安全的重新协商。

至于什么可以触发重新协商,您可以在不同的RFC中追踪: TLS v1.0 , TLS v1.1 , TLS v1.2 。 对CVE-2009-3555进行分析的不同博客post也提供了何时发生这种情况的详细信息。

关于是否可以从s_client子命令中强制进行testing,是的,这在手册页中有logging :

关联命令
如果与SSL服务器build立了连接,则将显示从服务器接收到的任何数据,并将任何按键发送到服务器。 当交互使用(这意味着既没有给出-quiet也没有-ign_eof),如果行以R开头,会话将被重新协商

这也可以通过编程来完成。