Page 66 - Web性能权威指南
P. 66

检查 SNI 主机名,选择适当的证书,继续完成握手。



                                        TLS、HTTP 及专用 IP
                TLS+SNI 机制与 HTTP 中发送 Host 首部是相同的,只不过后者是客户端要在请求
                中包含站点的主机名。总之,都是相同的 IP 地址服务于不同的域名,而区分不同
                域名的手段就是 SNI 或 Host。
                遗憾的是,很多旧版本的客户端(Windows XP 上的大多数 IE、Android 2.2 等平
                台上的浏览器)都不支持 SNI。如果你想与这些旧版本的客户端进行 TLS 通信,
                就得为每个主机准备一个专用 IP 地址。


               4.3 TLS会话恢复

               完整 TLS 握手会带来额外的延迟和计算量,从而给所有依赖安全通信的应用造成严
               重的性能损失。为了挽回某些损失,TLS 提供了恢复功能,即在多个连接间共享协
               商后的安全密钥。

               4.3.1 会话标识符

               最早的“会话标识符”(Session Identifier,RFC 5246)机制是在 SSL 2.0 中引入的,
               支持服务器创建 32 字节的会话标识符,并在上一节我们讨论的完整的 TLS 协商期
               间作为其“ServerHello”消息的一部分发送。

               在内部,服务器会为每个客户端保存一个会话 ID 和协商后的会话参数。相应地,客
               户端也可以保存会话 ID 信息,并将该 ID 包含在后续会话的“ClientHello”消息中,
               从而告诉服务器自己还记着上次握手协商后的加密套件和密钥呢,这些都可以重用。
               假设客户端和服务器都可以在自己的缓存中找到共享的会话 ID 参数,那么就可以进
               行简短握手(图 4-3)。否则,就要重新启动一次全新的会话协商,生成新的会话 ID。

               借助会话标识符可以节省一次往返,还可以省掉用于协商共享加密密钥的公钥加密
               计算。由于重用了之前协商过的会话数据,就可以迅速建立一个加密连接,而且同
               样安全。


                          实际应用中,大多数 Web 应用会尝试与同一个主机建立多个连接,以便并
                          行取得资源。在这种情况下,会话恢复就成为减少延迟及两端计算量的必
                          备优化手段。
                          大多数现代浏览器在打开到相同服务器的新连接之前,都会有意等待第一
                          个 TLS 连接完成。这样,后续的 TLS 连接就可以重用第一个 SSL 会话,
                          从而避免重新握手造成的损失。


               48   |   第 4 章
   61   62   63   64   65   66   67   68   69   70   71