我正在使用一个将OpenSSL用于客户端TLS端的应用程序。 我们将OpenSSL版本从0.9.8e升级到0.9.8k。 然后TLS不起作用......
Wireshark显示新版本(使用OpenSSL 0.9.8k)发送带有SessionTicket扩展的客户端hello数据包 - 服务器端响应致命的内部错误。
以前的版本发送了几乎相同的hello数据包,但没有SessionTicket ext。
当我用SSLv23_client_method替换TLSv1_client_method时,一切正常 - 发送的客户端hello数据包是SSLv2(在嗅探器中)没有任何扩展(因为它不是TLS而是SSL?)
是否有更好的方法可以禁用此扩展程序或以其他方式解决问题?
提前致谢, rursw1
答案 0 :(得分:5)
来自RFC 5077的引用: “请注意,空SessionTicket扩展的编码是 RFC 4507中的含义不明确。一个RFC 4507实现可能已编码 它为:
00 23 Extension type 35
00 02 Length of extension contents
00 00 Length of ticket
或者它可能以与此更新相同的方式对其进行编码:
00 23 Extension type 35
00 00 Length of extension contents
希望支持RFC 4507客户端的服务器应该响应 空SessionTicket扩展的编码方式与接收时相同。 “ 所以我使用的服务器支持RFC 4507而不是更新的5077。
使用带有SSL_OP_NO_TICKET的SSL_CTX_set_options正常删除它解决了这个问题。
希望这会对某人有所帮助......
编辑: 好吧,这也可以使用配置标志-no-tlsext来完成。 (运行perl Configure脚本时)。 但是,请注意在OpenSSL 0.9.8n和OpenSSL 1.0.0中,您需要注释掉源代码的某些部分,否则它将无法编译 - 因为安全重新协商(被认为本身不安全)需要它