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 章
   73   74   75   76   77   78   79   80   81   82   83