【问题标题】:Does SSL perform automatic renegotiationSSL 是否执行自动重新协商
【发布时间】:2019-02-17 22:48:59
【问题描述】:

我有一个用 C++ 编写的客户端服务器应用程序,使用 SSL 1.0.1n 进行套接字通信。我试图阻止重新谈判(这是一项要求)。在我的代码中,我没有发起重新协商。 我看到 openssl 有一个 BIO_set_ssl_renegotiate_bytes 和 BIO_set_ssl_renegotiate_timeout 允许您在读取一定数量的字节或超时后设置自动重新协商。 我的问题是,如果我没有为其中任何一个设置值,它们是否具有默认值,SSL 仍会自动启动重新协商?如果没有在代码中完成,我无法弄清楚导致重新谈判的原因。

【问题讨论】:

  • 可以始终阅读 OpenSSL 源代码来获得答案...
  • 您不喜欢提高安全性?
  • 我已经按照你的建议做了,看来这两个值只能通过调用上面的 2 个函数来设置。因此,我得出结论,如果不设置字节或超时,则不会进行自动重新协商。感谢您的帮助。

标签: c++ ssl openssl


【解决方案1】:

我试图阻止重新谈判(这是一项要求)

希望该要求不是对CVE-2009-3555 的回应。这已在OpenSSL 0.9.8k in Nov 2009 中修复。 TLSv1.1 及更高版本的协议从未受到该漏洞的影响。

不过,你仍然可以set the SSL_OP_NO_RENEGOTIATION option via SSL_CTX_set_options() or SSL_set_options

SSL_CTX_set_options

姓名

SSL_CTX_set_options、SSL_set_options、SSL_CTX_clear_options、 SSL_clear_options、SSL_CTX_get_options、SSL_get_options、 SSL_get_secure_renegotiation_support - 操作 SSL 选项

概要

 #include <openssl/ssl.h>

 long SSL_CTX_set_options(SSL_CTX *ctx, long options);
 long SSL_set_options(SSL *ssl, long options);

 long SSL_CTX_clear_options(SSL_CTX *ctx, long options);
 long SSL_clear_options(SSL *ssl, long options);

 long SSL_CTX_get_options(SSL_CTX *ctx);
 long SSL_get_options(SSL *ssl);

 long SSL_get_secure_renegotiation_support(SSL *ssl);

描述

SSL_CTX_set_options() 将选项中通过位掩码设置的选项添加到 ctx。之前已经设置的选项不会被清除!

SSL_set_options() 将通过选项中的位掩码设置的选项添加到 ssl。 之前已经设置的选项不会被清除!

SSL_CTX_clear_options() 清除选项中通过位掩码设置的选项 到 ctx。

SSL_clear_options() 清除选项中通过位掩码设置的选项 ssl。

SSL_CTX_get_options() 返回为 ctx 设置的选项。

SSL_get_options() 返回为 ssl 设置的选项。

SSL_get_secure_renegotiation_support() 表示对端是否 支持安全重协商。请注意,这是通过宏实现的。 备注

SSL 库的行为可以通过设置几个来改变 选项。这些选项被编码为位掩码,并且可以通过 按位或运算 (|)。

SSL_CTX_set_options() 和 SSL_set_options() 影响(外部) SSL 库的协议行为。的(内部)行为 API 可以通过使用类似的 SSL_CTX_set_mode 和 SSL_set_mode() 函数。

在握手期间,使用 SSL 对象的选项设置。 当使用 SSL_new() 从上下文创建新的 SSL 对象时, 当前选项设置被复制。对 ctx 的更改尚未影响 创建 SSL 对象。 SSL_clear() 不影响设置。

...

以下修改选项可用:

...

SSL_OP_NO_RENEGOTIATION

在 TLSv1.2 及更早版本中禁用所有重新协商。不要寄 HelloRequest 消息,并通过忽略重新协商请求 客户您好。

安全重新谈判

...

请注意,该页面有一个“SECURE RENEGOTIAION”部分。阅读它。

然后,您确实需要检查您的要求。他们很有可能已经过时了十年。通过让您将时间和精力花在十年前解决的问题上,您并没有花时间和精力来解决当前的问题。

【讨论】:

  • 我已经下载了几个版本的源代码,这个选项只从 1.1.1 开始出现。我正在使用 1.0.1n
  • @user3621099 从 1.0.1 升级到 1.1.1 应该没有那么难。主要区别在于许多结构变得不透明,因此在早期版本中,您必须自己挖掘数据字段才能获得证书扩展等某些内容,1.1.1 现在提供..._get0_...() 函数来检索相同的内容字段。
猜你喜欢
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
相关资源
最近更新 更多