Page 80 - Web性能权威指南
P. 80
• 理想的证书链应该在 2 KB 或 3 KB 左右,同时还能给浏览器提供所有必要的信息,
避免不必要的往返或者对证书本身额外的请求。优化 TLS 握手可以消除关键的性
能瓶颈,因为每个新 TLS 连接都要经历同样的延迟。
4.7.7 OCSP封套
每个新 TLS 连接都要求浏览器验证发送过来的证书链的签名。然而,不要忘了还
有一步:浏览器也需要验证证书没有被撤销。为此,浏览器可能会定期下载并缓存
4.5.1 节提到的证书颁发机构发布的“证书撤销名单(CRL)”,而且还可能需要分派
发送一个 4.5.2 节提到的“在线证书状态协议(OCSP)”请求,以便实时验证。遗
憾的是,浏览器在这时候的行为差别很大。
• 某些浏览器会使用自己的更新机制推送更新的 CRL 名单,而不会按需发送请求。
• 某些浏览器可能只会针对扩展验证证书(EV 证书)进行实时 OCSP 和 CRL 检查。
• 某些浏览器可能会在上述任何一种方式下阻塞 TLS 握手,有些则不会,具体情况
取决于开发商、平台和浏览器版本。
这里的情况很复杂,也没有最好的解决方案。不过,在某些浏览器中还是可以采用
一个叫做 OCSP 封套(OCSP stapling)的优化措施:服务器可以在证书链中包含
(封套)证书颁发机构的 OCSP 响应,让浏览器跳过在线查询。把查询 OCSP 操作
转移到服务器可以让服务器缓存签名的 OCSP 响应,从而节省很多客户端的请求。
与此同时,还要注意一些情况。
• OCSP 响应从 400 字节到 4000 字节不等。把这么大的响应封套在证书链里照样
会造成 TCP 拥塞窗口溢出,因此要关注整体大小。
• 只能包含一个 OCSP 响应,即在没有缓存的情况下,浏览器对其他中间证书可能
仍然需要发送 OCSP 请求。
最后,要启用 OCSP 封套,还需要服务器支持才行。好在,NginX、Apache 和 IIS
等服务器都可以通过配置支持 OCSP 封套。对于其他服务器,请参考文档中的说明。
4.7.8 HTTP严格传输安全(HSTS)
HTTP 严格传输安全(HSTS,Strict Transport Security)是一种安全策略机制,它能让
服务器通过简单的 HTTP 首部(如 Strict-Transport-Security: max-age=31536000)
对适用的浏览器声明访问规则。具体来讲,它可以让用户代理遵从如下规则:
• 所有对原始服务器的请求都通过 HTTPS 发送;
• 所有不安全的链接和客户端请求在发送之前都应该在客户端自动转换为 HTTPS;
62 | 第 4 章