SSL_CTX_set_options()是OpenSSL folk使用编译时OpenSSL_NO_心跳来禁用TLSv1心跳的原因吗?
在了解到使用-DOPENSSL_NO_HEARTBEATS重新编译将禁用OpenSSL 1.0.1e中的TLSv1 HEARTBEATS后不久,我想知道为什么它不是一个运行时选项,可能被称为类似SSL_OP_NO_TLS_HEARTBEATS的东西 因此,我查看了SSL.H,发现“options”是一个无符号长位掩码,根据编译平台/模式的不同,它可能是32位或64位,但OpenSSL代码似乎假定为32位,而且更重要的是,它意味着它只有32个可能的选项,这似乎已经用尽了,除了位0x00000400L之外,我都是从SSL复制的。H:SSL_CTX_set_options()是OpenSSL folk使用编译时OpenSSL_NO_心跳来禁用TLSv1心跳的原因吗?,ssl,openssl,heartbleed-bug,Ssl,Openssl,Heartbleed Bug,在了解到使用-DOPENSSL_NO_HEARTBEATS重新编译将禁用OpenSSL 1.0.1e中的TLSv1 HEARTBEATS后不久,我想知道为什么它不是一个运行时选项,可能被称为类似SSL_OP_NO_TLS_HEARTBEATS的东西 因此,我查看了SSL.H,发现“options”是一个无符号长位掩码,根据编译平台/模式的不同,它可能是32位或64位,但OpenSSL代码似乎假定为32位,而且更重要的是,它意味着它只有32个可能的选项,这似乎已经用尽了,除了位0x00000400
/* Option bits for SSL_CTX_set_options() */
#define SSL_OP_MICROSOFT_SESS_ID_BUG 0x00000001L
#define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x00000002L
#define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004L
#define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L
#define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x00000010L
#define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L
#define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x00000040L
#define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L
#define SSL_OP_TLS_D5_BUG 0x00000100L
#define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L
/***** 0x00000400L SEEMS TO BE THE ONLY OPTION BIT FREE *****/
#define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800L
#define SSL_OP_NO_QUERY_MTU 0x00001000L
#define SSL_OP_COOKIE_EXCHANGE 0x00002000L
#define SSL_OP_NO_TICKET 0x00004000L
#define SSL_OP_CISCO_ANYCONNECT 0x00008000L
#define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000L
#define SSL_OP_NO_COMPRESSION 0x00020000L
#define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000L
#define SSL_OP_SINGLE_ECDH_USE 0x00080000L
#define SSL_OP_SINGLE_DH_USE 0x00100000L
#define SSL_OP_EPHEMERAL_RSA 0x00200000L
#define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000L
#define SSL_OP_TLS_ROLLBACK_BUG 0x00800000L
#define SSL_OP_NO_SSLv2 0x01000000L
#define SSL_OP_NO_SSLv3 0x02000000L
#define SSL_OP_NO_TLSv1 0x04000000L
#define SSL_OP_NO_TLSv1_2 0x08000000L
#define SSL_OP_NO_TLSv1_1 0x10000000L
#define SSL_OP_NETSCAPE_CA_DN_BUG 0x20000000L
#define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x40000000L
#define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000L
你认为这就是他们决定做的原因吗-用心跳代替SSL心跳?如果是这样的话,为什么他们不使用0x0000040L作为SSL\u OP\u NO\u TLS\u心跳?我想知道你对此的看法。实际上,无论这项调查的结果如何,似乎OpenSSL需要修复他们的选项系统,因为它似乎已经耗尽了。如果我也在那里,请告诉我 你明白了:因为[期权制度]似乎已经用尽了 最后分配的选项是针对苹果的
SecureTransport
ECDSA错误(SSL\u OP\u SAFARI\u ECDHE\u ECDSA\u错误
)。这是以前使用的值。您可以在以下位置阅读有关讨论(以及价值重用)的内容:
如果是这样的话,为什么他们不使用0x0000040L作为SSL\u OP\u NO\u TLS\u心跳 我相信SSL\u OP\u SAFARI\u ECDHE\u ECDSA\u BUG使用它。发件人:
我想知道你对此的看法
我不相信这是一种观点;) 如果SSL_CTX_set_选项用于处理断开的对等点,则大多数选项都是可用的,因此禁用heartbeat实际上还不符合该概念,例如,可能没有已知的SSL堆栈,该堆栈在hello消息的扩展部分中提供接受heartbeat的功能
因此,正确的方法可能是SSL\u ctrl或SSL\u CTX\u ctrl,实际上有一个SSL\u ctrl\u SET\u TLS\u EXT\u HEARTBEAT\u NO\u REQUESTS设置。这会通知hello消息中的对等方它将不接受心跳请求。但是,如果对等方只是忽略此设置并发送心跳信号,它将尽职尽责地响应心跳信号请求:(“如果使用SSL\u CTX\u set\u选项来处理断开的对等方,则大多数选项都是…”-也许是在服务器端。但我经常在我的客户端上使用
SSL\u OP\u NO\u SSLv2
、SSL\u OP\u NO\u SSLv3
和SSL\u OP\u NO\u压缩
,它们显然不是bug解决方案。(我不会在服务器上使用SSL\u OP\u ALL
,因为只有两个左右的应用。我总是在服务器上使用SSL\u OP\u CIPHER\u server\u首选项
)。好的,这些不是针对断开的对等点的解决方法,而是针对断开的实现:)例如,SSLv3不好,SSLv2更坏,压缩有坏的副作用,需要服务器密码\u服务器\u首选项,因为客户端不知道正确的密码是什么。@Steffen,SSL\u CTX\u set\u options()是一个隐藏对SSL\u CTX\u ctrl()的调用的宏,但我认为你的评论很有用,因为它突出了一些重要的东西:有太多的选项被用来单独绕过bug,而正如jww所说,禁用SSLv2和SSLv3将绕过它们,除了一对,使所有这些选项或多或少都没用。值得思考的是:-)
+#define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000400L