HTTP的性能损耗,主要是
1. TLS握手过程
2. 握手后的对称加密报文传输
针对硬件的优化:
HTTPS协议是计算密集型,而不是I/O密集型,所以硬件的优化,更多的是花在CPU,而不是网卡硬盘;适当选择针对性的CPU,比如支持AES-NI特性的CPU,因为已经在指令级别优化了AES;
查看linux的CPU是否支持AES-NI指令集:
1 | sort -u /proc/crypto | grep module | grep aes |
了解ChaCha20对称加密算法相比AES算法的区别,前者相对后者对CPU的支持更好一些;
针对软件优化:
软件升级(升级linux内核从2.x到4.x);协议优化(将OpenSSL从1.0.1升级到1.1.1);改动越小升级效果越好;
针对协议优化:
使用 RSA 密钥交换算法的 TLS 握手过程,不仅慢,而且安全性也不高;
因此如果可以,尽量选用 ECDHE 密钥交换算法替换 RSA 算法,因为该算法由于支持「False Start」,它是“抢跑”的意思(理解抢跑的意思,即具备前向安全性,安全性也高);
使用ECDHE算法应该尽量选择 x25519 曲线,该曲线是目前最快的椭圆曲线;
如果对于安全性能要求不是太高,可以使用AES_128_GCM,他比AES_256_GCM快,因为秘钥长度更短;
TLS升级1.2到1.3,优化握手次数;
针对证书优化:
从CRL=>OCSP=>OCSP Stapling
会话复用:
Session ID,Session Ticket;
Pre-shared Key(TLS1.3);
了解重放攻击(针对重放攻击,应当给秘钥一个合理的过期时间);