rke*_*erm 1 c++ ssl openssl handshaking
我正在使用一个将OpenSSL用于客户端TLS端的应用程序.我们将OpenSSL版本从0.9.8e升级到0.9.8k.然后TLS不起作用......
Wireshark的显示,新版本(使用OpenSSL 0.9.8k)向客户端发送hello报文与SessionTicket延伸 - 与服务器端有致命内部错误响应.
以前的版本发送一个几乎相同的hello数据包,但没有SessionTicket ext.
当我用SSLv23_client_method替换TLSv1_client_method时,一切正常 - 发送的客户端hello数据包是一个SSLv2(在嗅探器中)没有任何扩展(因为它不是TLS而是SSL?)
有没有更好的方法来禁用此扩展或以另一种方式解决问题?
请提前谢谢,rursw1
引自RFC 5077:"请注意,在RFC 4507中,空的SessionTicket扩展的编码是不明确的.RFC 4507实现可能将其编码为:
00 23 Extension type 35
00 02 Length of extension contents
00 00 Length of ticket
Run Code Online (Sandbox Code Playgroud)
或者它可能以与此更新相同的方式对其进行编码:
00 23 Extension type 35
00 00 Length of extension contents
Run Code Online (Sandbox Code Playgroud)
希望支持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中,您需要注释掉源代码的某些部分,否则它将无法编译 - 因为安全重新协商(被认为本身不安全)需要它.