OpenSSL:SessionTicket TLS扩展问题

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

rke*_*erm 5

引自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中,您需要注释掉源代码的某些部分,否则它将无法编译 - 因为安全重新协商(被认为本身不安全)需要它.