我有一个使用SSL 1.0.1n进行套接字通信的用c ++编写的客户端服务器应用程序。我试图防止重新谈判(这是一项要求)。我在代码中的任何地方都不会发起重新协商。 我看到openssl具有一个BIO_set_ssl_renegotiate_bytes和BIO_set_ssl_renegotiate_timeout,允许您在读取一定数量的字节或超时后设置自动重新协商。 我的问题是,如果我没有为其中任何一个设置值,它们是否具有默认值,其中SSL仍会自动启动重新协商?我无法弄清楚是什么导致了重新协商(如果未通过代码完成)。
答案 0 :(得分:1)
我正在尝试防止重新协商(这是必需的)
希望该要求并非针对CVE-2009-3555。该问题已在OpenSSL 0.9.8k in Nov 2009中修复。 TLSv1.1和更高版本的协议从未受到该漏洞的攻击。</ p>
但是,您仍然可以set the SSL_OP_NO_RENEGOTIATION
option via SSL_CTX_set_options()
or SSL_set_options
:
SSL_CTX_set_options
NAME
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库的协议行为。的(内部)行为 可以通过使用类似的SSL_CTX_set_mode和 SSL_set_mode()函数。
在握手期间,将使用SSL对象的选项设置。 使用SSL_new()从上下文创建新的SSL对象时, 当前选项设置被复制。更改ctx不会影响 创建的SSL对象。 SSL_clear()不会影响设置。
...
以下修改选项可用:
...
SSL_OP_NO_RENEGOTIATION
禁用TLSv1.2和更早版本中的所有重新协商。不要寄 HelloRequest消息,并通过忽略重新协商请求 ClientHello。
安全重新确认
...
请注意,页面上有一个“安全叛逆”部分。阅读。
然后,您确实需要查看您的要求。他们很有可能已经过期了十年。通过花时间和精力解决十年前已解决的问题,您就无需花费时间和精力解决当前问题。