3.7 HTTPS 优化
性能损耗
产生性能消耗的两个环节:
- 第一个环节,TLS 协议握手过程;
- 第二个环节,握手后的对称加密报文传输。
优化
硬件:HTTPS 协议是计算密集型,而不是 I/O 密集型,所以需要提升 CPU 性能。
- 应该选择对于加密算法有优化的CPU
- 比如支持 AES-NI 特性的 CPU,这款 CPU 能在指令级别优化了 AES 算法,这样便加速了数据的加解密传输过程。
- 应该选择对于加密算法有优化的CPU
软件:将软件升级到有算法优化的版本(通常越新越好)
- 但是大公司升级软件成本较高,且可能会影响正常的线上服务。
协议:密钥交换算法应该选择 ECDHE 算法,而不用 RSA 算法,因为 ECDHE 算法具备前向安全性,而且客户端可以在第三次握手之后,就发送加密应用数据,节省了 1 RTT。
- 将 TLS1.2 升级 TLS1.3,因为 TLS1.3 的握手过程只需要 1 RTT,而且安全性更强。(使用了椭圆曲线算法)
对于证书优化的方向:
服务器应该选用 ECDSA 证书,而非 RSA 证书,因为在相同安全级别下,ECC 的密钥长度比 RSA 短很多,这样可以提高证书传输的效率;
服务器应该开启 OCSP Stapling 功能,由服务器预先获得 OCSP 的响应,并把响应结果缓存起来,这样 TLS 握手的时候就不用再访问 CA 服务器,减少了网络通信的开销,提高了证书验证的效率;
- OCSP响应的结果是当前的服务器证书是否有效,且也是通过签名保证权威性的(且带有时间戳,可以理解为吊销是一天一次,那么只要CA说今天有效,那么今天就能继续使用)
- 当然客户端可以每次请求当前服务器的证书是否吊销
- OCSP响应的结果是当前的服务器证书是否有效,且也是通过签名保证权威性的(且带有时间戳,可以理解为吊销是一天一次,那么只要CA说今天有效,那么今天就能继续使用)
对于重连 HTTPS 时,我们可以使用一些技术让客户端和服务端使用上一次 HTTPS 连接使用的会话密钥,直接恢复会话,而不用再重新走完整的 TLS 握手过程。
常见的会话重用技术有 Session ID(定期失效,但是现在分布式,不一定能命中) 和 Session Ticket(类似于Token,分布式可以使用),用了会话重用技术,当再次重连 HTTPS 时,只需要 1 RTT 就可以恢复会话。对于 TLS1.3 使用 Pre-shared Key 会话重用技术,只需要 0 RTT 就可以恢复会话。
Pre-Shared Key:也是用 Session ID 和 Session Ticket 完成快速恢复会话。
这些会话重用技术虽然好用,但是存在一定的安全风险,它们不仅不具备前向安全,而且有重放攻击的风险,所以应当对会话密钥设定一个合理的过期时间。
- 重放攻击:截获Session ID或者Session Ticket等身份验证信息,仿造授权客户进行攻击。(可以设置过期时间达到一定的预防效果)
