https 握手协议_HTTPS 及其性能优化简述

HTTP 超文本协议是互联网基础协议,但它使用明文传输十分不安全. 而 HTTPS 则在 HTTP 协议基础上增加了 TLS 认证加密过程, 使得传输变得安全,但加密握手过程中带来了性能上的损耗. 本文梳理了 HTTPS 的一些知识以及性能优化的方法.

HTTPS 简介

1.1 http 协议

http 协议是用于从 www 服务器传输超文本到本地浏览器的传输协议. 是最广泛使用的网络传输协议.

1.3 ssl/tls

ssl(secure socket layer) 安全套接层是为网络提供安全完整通信的安全协议. tls( transpor layer security) 是改进了 ssl 中存在的安全漏洞的安全协议,提供给两个应用程序保密性、数据完整性的通信协议.

1.2 https

https 超文本传输安全协议(Hyper Text Transfer Protocol over Secure Socket Layer) 是结合 http+ssl/tls 协议的安全传输协议,它广泛用于互联网上的数据安全传输.

HTTPS 原理与过程

2.1 HTTPS 原理

HTTPS 主要用于解决 HTTP 协议明文传输的缺陷,传输的数据可能被截获、修改或者伪造双方. HTTPS 则是为了解决该问题的协议, 它结合了 SSL/TLS 和 HTTP 协议,确保通信双方是可信、数据是加密的且未被篡改过的.

  1. 加密: 相比 HTTP ,HTTPS 对数据进行了加密,可以避免用户的数据被监听.
  2. 数据一致性: 确保用户的数据在传输过程中不会被篡改.
  3. 身份认证: 确保网站是安全受信的,通过对网站进行身份认证,防止中间人攻击.
  4. 非对称加密: 加密密钥和解密密钥是不一样的加密方式,如 RSA 等. 由于加密和解密密钥不同,则可以将加密密钥公开作为公钥,而收信息一方保留解密用的私钥,避免了对称加密算法需要交换密钥的风险.
  5. SSL/TLS
  6. SSL(Secure Socket Layer): 位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.
  7. TLS(Transport Layer Security) : 用于两个应用程序之间提供保密性和数据完整性. TLS 使得 SSL 更加安全.

2.2 HTTPS 握手过程

HTTPS 的建立过程包括 7 次握手,除了 TCP 建立连接的三次握手,还包括 TLS 四次握手过程. 如下:

  1. 首先通过 tcp 三次握手建立连接
    1. 客户端发送带有 SYN 及 seq 的请求
    2. 服务器返回 ack、ACK、SYN、seq 的请求
    3. 客户端返回 ack 及 ACK,连接建立
  2. 通过 TLS 的四次握手建立安全的连接, 以下是 TLS 1.2 的过程:
    1. 客户端向服务器发送 client hello 消息, 其中携带客户端支持的协议版本、加密算法、压缩算法以及客户端生成的随机数.
    2. 服务端收到 client hello 消息后,向客户端返回一小信息
      1. Server Hello 消息,并携带选择特定的协议版本、加密方法、会话 ID 以及服务端生成的随机数.
      2. Certificate 消息,即服务端的证书链,其中包含证书支持的域名、发行方和有效期等信息.
      3. Server Key Exchange 消息,传递公钥以及签名等信息.
      4. 可选的消息 CertificateRequest,验证客户端的证书.
      5. Server Hello Done 消息,通知服务端已经发送了全部的相关信息.
    3. 客户端收到服务端的协议版本、加密方法、会话 ID 以及证书等信息后,验证服务端的证书
      1. 向客户端发送 Change Cipher Spec 消息,通知客户端后面的数据段会加密传输;
      2. 向客户端发送 Finished 消息,验证客户端的 Finished 消息并完成 TLS 握手;
    4. 服务端收到 Change Cipher SpecFinished 消息后,可以开始进行应用数据传输.
  3. 在 TCP + TLS 建立的安全通道的基础上,通过 HTTP 协议进行数据传输

下图是访问 https://www.baidu.com 过程中的 tls 握手过程,可以看到下面的 TLSv1.2 过程中,进行了四次握手,有两次 (OUT) 发送数据,两次(IN) 接受服务器请求. 过程如下所示:

40f25bdc0a070e5ef0d4ef560f156b9d.png

https 过程

HTTPS 性能优化

3.1 性能消耗

在 HTTPS 建立的过程中,完整的四次握手性能十分低,是 HTTP 的 10%. 这对于用户体验是很大的伤害,一些高访问量的网站十分有必要进行 HTTPS 的优化. 以下亮点是 HTTPS 中性能差的部分:

  • 完全握手: 性能是 HTTP 的 10%. 相当 1 万 QPS 的 HTTP 访问,HTTPS 只能达到几百.
  • 加密算法: HTTPS 中使用非对称加密算法交换密钥,使用对称加密算法加密数据. 加密算法将消耗计算量.
    • RSA 算法: 它对性能的影响占了 75 % 左右. 主要是由于 RSA 算法中涉及大素数的指数计算.
    • 对称加解密: MAC 计算,它们对性能影响比较小,是微秒级别的.

3.3 优化方案

对于减少 HTTPS 消耗的时间,可以从减少计算量、提升计算性能等方面考虑,以下是三个优化点:

  • 减少完全握手的发生: 对于已经握手过的客户端,使用简化握手. 经过优化后,可以将完全握手比例缩小到 30% .
    • 策略一: 服务端通过 session_id 找到对应客户端信息,然后进行简化握手,将 2 个 RTT 的握手过程简化为 1 个 RTT.
    • 策略二: 客户端发起握手时,携带 session ticket,服务器拿到 session ticket 后会进行解密,解密成功了后就意味着它是可被信任的,握手完成.
  • 使用代理计算: 对于需要消耗 CPU 计算的算法过程,使用代理计算,从而减少完全握手所需的计算时间.
    • 算法分离: 将最消耗 CPU 计算的算法(RSA、ECDHE_RSA)分离出来,使用其它机器进行计算,减少平均计算时间.
    • 代理计算: 可采用硬件加速卡、空闲 CPU 计算
    • 异步执行: 异步等待代理机器的计算结果.
  • 优化对称加密算法: 对称加密算法涉及块式对称加密算法、流式对称加密算法. 开启 AES-NI 并使用,提升计算性能.

END

4.1 参考资料

1. https://www.infoq.cn/article/soKW3Lm9hoU4yUh2G81h

2. https://zhuanlan.zhihu.com/p/25290538

3. https://mp.weixin.qq.com/s/hf_SmGdapU_1FXQaA0P3-A

4. https://blog.csdn.net/qq_36894974/article/details/104856083

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值