HTTPS 之 TLS 性能优化详述(2)

当使用 CDN 时,用户连接到最近的 CDN 节点,这只有很短的距离,TLS 握手的网络延迟也很短;而 CDN 与服务器之间可以直接复用已有的远距离长连接。这意味着与 CDN 快速初始 TLS 握手后,用户与服务器就建立了有效连接。

2. TLS协议优化
在连接管理之后我们可以专注于 TLS 的性能特征,具备对 TLS 协议进行安全和速度调优的知识。

2.1 密钥交换
使用 TLS 最大的成本除了延迟以外,就是用于安全参数协商的 CPU 密集型加密操作。这部分通讯称为密钥交换(key exchange)。密钥交换的 CPU 消耗很大程度上取决于服务器选择的私钥算法、私钥长度和密钥交换算法。

密钥长度
破解密钥的难度取决于密钥的长度,密钥越长越安全。但较长的密钥同时也意味着需要花费更多时间进行加密和解密。

密钥算法
目前有两种密钥算法可用:RSA 和 ECDSA。当前 RSA密钥算法推荐最小长度2048位(112位加密强度),将来更多会部署3072位(128位加密强度)。ECDSA在性能和安全性上要优于 RSA,256位的 ECDSA (128位加密强度)提供和 3072位的 RSA 一样的安全性,却有更好地性能。

密钥交换
目前有两种可用的密钥交换算法:DHE 和 ECDHE。其中 DHE 太慢不推荐使用。 密钥交换算法的性能取决于配置的协商参数长度。对于 DHE,常用的1024和2048位,分别提供80和112位安全等级。对于 ECDHE,安全和性能取决于一种称为 **曲线** 的东西。secp256r1提供128位安全等级。

你在实践中不能随意组合密钥钥和密钥交换算法,但可以使用由协议指定的组合。

2.2 证书
一次完整的 TLS 握手期间,服务器会把它的证书链发送给客户端验证。证书链的长度和正确性对握手的性能有很大影响。

使用尽可能少的证书
证书链里的每个证书都会增大握手数据包,证书链中包含太多证书有可能导致 TCP 初始拥塞窗口溢出。

只包含必需的证书
证书链里包含非必需证书是个常见错误,每个这样的证书会给握手协议额外增加1-2KB。

提供完整的证书链
服务器必须提供一个被根证书信任的完整证书链。

使用椭圆曲线证书链
因为 ECDSA 私钥长度使用更少的位,所以 ECDSA 证书会更小。

避免同一张证书绑定过多域名
每增加一个域名都会增加证书的大小,对于大量域名来说会有明显的影响。

2.3 吊销检查
虽然证书吊销状态在不断变化,并且用户代理对证书吊销的行为差异很大,但是作为服务器,要做的就是尽可能快地传递吊销信息。

使用 OCSP
信息的证书 OCSP 被设计用于提供实时查询,允许用户代理只请求访问网站的吊销信息,查询简短而快速(一个HTTP请求)。相比之下 CRL 是一个包含大量被吊销证书的列表。

使用具有快速且可靠的 OCSP 响应程序的 CA
不同 CA 之间的 OCSP 响应程序性能不同,在你向 CA 提交之前先检查他们的历史 OCSP 响应程序。 另一个选择 CA 的标准是它更新 OCSP 响应程序的速度。

部署 OCSP stapling
OCSP stapling 是一种允许在 TLS 握手中包含吊销信息(整个OCSP响应)的协议功能。启用之后,通过给予用户代理进行吊销检查的全部信息以带来更好地性能,可以省去用户代理通过独立的连接获取 CA 的 OCSP 响应程序来查询吊销信息。

2.4 协议兼容
如果你的服务器与一些新版本协议的特性(例如TLS 1.2)不兼容,浏览器可能需要通过与服务器进行多次尝试,才能协商一个加密的连接。确保良好的 TLS 性能的最好方式是升级最新的 TLS 协议栈以支持较新的协议版本和扩展。

2.5 硬件加速
随着 CPU 速度的不断提高,基于软件的 TLS 实现在普通 CPU 上已经运行得足够快,无需专门的加密硬件就能处理大量的 HTTPS 请求。但安装加速卡或许能够提升速度。

参考文章
《HTTPS权威指南:在服务器和Web应用上部署SSL/TLS和PKI》PDF下载见 https://www.linuxidc.com/Linux/2018-02/151008.htm

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/46a878827a02b65810497076f6875bfc.html