OpenSSL:SessionTicket TLS扩展问题

时间:2010-04-19 12:56:09

标签: c++ openssl ssl handshaking

我正在使用一个将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

1 个答案:

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