HTTPS优化简单总结
性能损耗
- 选择椭圆曲线,并生成椭圆曲线的计算耗时
- CA证书验证的耗时
- 计算pre-master的耗时
硬件优化
HTTPS是计算密集型任务,不是IO密集型任务
所以硬件最好买更高级的CPU,而不是网卡,磁盘
协议优化
- ECDHE代替RSA,因为ECDHE可以在 TLS 协议的第 3 次握手后,第 4 次握手前,发送加密的应用数据
- 强制选择性能高的椭圆曲线
- 安全性要求不高时,强制选择性能高的对称加密算法
- TLS1.2升级成TLS1.3,TLS 1.3第一次握手把 Hello 和公钥交换这两个消息合并成了一个消息,于是这样就减少到只需 1 RTT 就能完成 TLS 握手
证书优化
- 证书传输优化:减少证书大小,降低网络IO负担。对于服务器的证书应该选择椭圆曲线(ECDSA)证书,而不是 RSA 证书,因为在相同安全强度下,ECC 密钥长度比 RSA 短的多
- 证书验证优化:证书验证需要访问CA然后下载官方数据
从 使用证书吊销列表CRL,下载一大个列表再判断证书有效性
到
OCSP在线证书协议实时查询每一张证书的有效性 - CA验证网络开销优化:服务器向 CA 周期性地查询证书状态,获得一个带有时间戳和签名的响应结果并缓存它
会话复用
TLS握手的目的就是为了算出最终的会话密钥,那把会话密钥缓存起来就好了
Session ID:
SessionID为key,会话密钥为Value缓存到服务器里面
缺点:
- 客户端增多,服务器内存压力增大
- 现在是多节点负载均衡的,服务器缓存可用性不高
Session Ticket:
客户端缓存【加密的会话密钥Ticket】,客户端再次连接服务器时,客户端会发送 Ticket
服务器解密后就可以获取上一次的会话密钥,然后验证有效期,如果没问题,就可以恢复会话了
对于集群服务器的话,要确保每台服务器加密「会话密钥」的密钥是一致的,这样客户端携带 Ticket 访问任意一台服务器时,都能恢复会话
Session ID 和 Session Ticket 都不具备前向安全性,所以会话复用要有一定的时间限制
因为一旦加密「会话密钥」的密钥被破解或者服务器泄漏「会话密钥」,前面劫持的通信密文都会被破解
什么是重放攻击
重放攻击的危险之处在于,如果中间人截获了某个客户端的 Session ID 或 Session Ticket 以及 POST 报文
而一般 POST 请求会改变数据库的数据
中间人就可以利用此截获的报文,不断向服务器发送该报文,这样就会导致数据库的数据被中间人改变了,而客户是不知情的
避免重放攻击的方式就是需要对会话密钥设定一个合理的过期时间