1

我正在使用一个将 OpenSSL 用于客户端 TLS 端的应用程序。我们将 OpenSSL 版本从 0.9.8e 升级到 0.9.8k。然后TLS不起作用......

Wireshark 显示新版本(使用 OpenSSL 0.9.8k)向客户端发送带有 SessionTicket 扩展名的 hello 数据包 - 并且服务器端以致命的内部错误响应。

以前的版本发送一个几乎相同的 hello 数据包,但没有 SessionTicket 分机。

当我用 SSLv23_client_method 替换 TLSv1_client_method 时,一切正常 - 发送的客户端 hello 数据包是 SSLv2 数据包(在嗅探器中),没有任何扩展名(因为它不是 TLS 而是 SSL?)

有没有更好的方法来禁用此扩展或以其他方式解决问题?

提前致谢, rusw1

4

1 回答 1

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_CTX_set_options 和 SSL_OP_NO_TICKET 将其“正常”删除解决了该问题。

希望这会帮助某人...

编辑:嗯,这也可以通过配置标志 -no-tlsext 来完成。(运行 perl 配置脚本时)。但是,请注意在 OpenSSL 0.9.8n 和 OpenSSL 1.0.0 中,您需要注释掉源代码的某些部分,否则它将无法编译 - 因为安全重新协商(这本身被认为是不安全的)需要它。

于 2010-04-21T13:40:06.327 回答