Page 78 - Web性能权威指南
P. 78
MSS(Maximum Segment Size,最大段大小)。换句话说,一方面不要让 TLS 记录
分成多个 TCP 分组,另一方面又要尽量在一条记录中多发送数据。以下数据可作为
确定最优 TLS 记录大小的参考:
• IPv4 帧需要 20 字节,IPv6 需要 40 字节;
• TCP 帧需要 20 字节;
• TCP 选项需要 40 字节(时间戳、SACK 等)。
假设常见的 MTU 为 1500 字节,则 TLS 记录大小在 IPv4 下是 1420 字节,在 IPv6
下是 1400 字节。为确保向前兼容,建议使用 IPv6 下的大小:1400 字节。当然,如
果 MTU 更小,这个值也要相应调小。
可惜的是,我们不能在应用层控制 TLS 记录大小。TLS 记录大小通常是一个设置,
甚至是 TLS 服务器上的编译时常量或标志。要了解具体如何设置这个值,请参考服
务器文档。
如果服务器要处理大量 TLS 连接,那么关键的优化是把每个连接占用的内
存量控制在最小。默认情况下,OpenSSL 等常用的库会给每个连接分配 50
KB 空间,但正像设置记录大小一样,有必要查一查文档或者源代码,然
后再决定如何调整这个值。谷歌的服务器把 OpenSSL 缓冲区的大小减少到
了大约 5 KB。
4.7.5 TLS压缩
TLS 还有一个内置的小功能,就是支持对记录协议传输的数据进行无损压缩。压缩
算法在 TLS 握手期间商定,压缩操作在对记录加密之前执行。然而,出于如下原
因,实践中往往需要禁用服务器上的 TLS 压缩功能:
• 2012 年公布的“CRIME”攻击会利用 TLS 压缩恢复加密认证 cookie,让攻击者
实施会话劫持;
• 传输级的 TLS 压缩不关心内容,可能会再次压缩已经压缩过的数据(图像、视频,
等等)。
双重压缩会浪费服务器和客户端的 CPU 时间,而且暴露的安全漏洞也很严重,因此
请禁用 TLS 压缩。实践中,大多数浏览器会禁用 TLS 压缩,但即便如此你也应该
在服务器的配置中明确禁用它,以保护用户的利益。
虽然不能使用 TLS 压缩,但应该使用服务器的 Gzip 设置压缩所有文本资
源,同时对图像、视频、音频等媒体采用最合适的压缩格式。
60 | 第 4 章