c++ - SSL 是否执行自动重新协商
问题描述
我有一个用 C++ 编写的客户端服务器应用程序,使用 SSL 1.0.1n 进行套接字通信。我试图阻止重新谈判(这是一项要求)。在我的代码中,我没有发起重新协商。我看到 openssl 有一个 BIO_set_ssl_renegotiate_bytes 和 BIO_set_ssl_renegotiate_timeout 允许您在读取一定数量的字节或超时后设置自动重新协商。我的问题是,如果我没有为其中任何一个设置值,它们是否具有默认值,SSL 仍会自动启动重新协商?如果没有在代码中完成,我无法弄清楚导致重新谈判的原因。
解决方案
我试图阻止重新谈判(这是一项要求)
希望该要求不是对CVE-2009-3555 的回应。这在 2009 年 11 月的 OpenSSL 0.9.8k 中得到了修复。TLSv1.1 和更高版本的协议从未受到该漏洞的影响。
但是,您仍然可以通过或设置SSL_OP_NO_RENEGOTIATION
SSL_CTX_set_options()
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 消息,并忽略通过 ClientHello 的重新协商请求。
安全的重新谈判
...
请注意,该页面有一个“SECURE RENEGOTIAION”部分。阅读。
然后,您确实需要检查您的要求。他们很有可能已经过时了十年。通过让您将时间和精力花在十年前解决的问题上,您并没有花费时间和精力来解决当前的问题。
推荐阅读
- swift - 根据输入的字符限制文本字段的长度?
- python - python unittest lambda函数
- bash - 如何给我的 shell 脚本一个简单的词来让它运行。例如“mkdir”
- cmake - CMake 中 midl.exe 和 cppwinrt.exe 的问题
- r - 加载 olsrr 并获得 U_FILE_ACCESS_ERROR
- mysql - 我怎样才能让一个字段在顺序中有特定的数字
- c - 即使字符串不相等,strncmp 也会给出 0 - C
- jquery - 使用 bxslider 在移动设备上显示一张幻灯片
- java - Java 8 Streams 删除重复字母
- python - 我们可以在 gunicorn 中使用 python ThreadingHTTPServer 吗?