HTTPS非对称加密传输与对称加密解读
HTTPS 的英文全称是:Hyper Text Transfer Protocol over Secure Socket Layer,它是以安全为目标的 HTTP 通道。从全称上可以看出,它其实不是一种新的应用层协议,只是 HTTP 协议将通信接口用 SSL 替代了 TCP。HTTP 协议中,应用层 HTTP 直接与传输层 TCP 通信,在 HTTPS 协议中 ,应用层 HTTP 与 SSL 通信,SSL 再与传输层的 TCP 通信,具体如图:
HTTPS 通过 SSL 层的加密,可以防止网站被篡改和劫持。下面我们简单看下 HTTPS 是如何进行加密解密的:
首先客户端和服务端会协商加密算法和协议版本。协商结束后,服务端发送公钥给客户端,客户端拿到公钥后,生成一个随机密码串(Pre-master secret),并通过公钥加密返回给服务端。服务端使用私钥解密密文后,得到此随机密码串(Pre-master secret),之后通过协商的随机数和加密算法,生成对称加密密钥。至此,双方得到了同一个密钥,后续使用此密钥实现对称加密解密。
我们知道对称加密性能更好,但只要持有密钥,就能将劫持的密文解密,无法解决被劫持的问题。非对称加密相对更安全,但同时加密解密性能开销大。可以看出 HTTPS 在握手阶段使用了非对称加密,在后续的通信中使用了对称加密,既保证了安全性,又最大限度保证了性能。
SSL 握手策略
HTTPS 在握手阶段有加密解密的过程,所以相比 HTTP 更消耗计算资源。压测引擎为了模拟海量用户执行请求,往往底层会在全局或线程维度,复用 TCP 连接和 SSL 握手信息。这提高了施压机的性能,但对希望每次循环模拟不同客户端行为的场景来说,施压机只模拟了足够的流量压力,并没有模拟足够的 SSL 握手计算压力,可能造成压力模拟不够准确的问题,如下图所示:
因此,在 HTTPS 压测中,需要根据压测场景的具体业务逻辑,指定每次循环是否重置 SSL 握手状态,准确模拟 SSL 握手计算压力。
SSL 协议版本
HTTPS 压测,在客户端(施压机)和服务端进行 SSL 握手的第一步,客户端会告知给服务端自己支持的最高 SSL 协议版本,然后服务端会从自己和客户端支持版本的交集中,取最高的版本作为实际使用的 SSL 版本。
在压测时,需要评估出真实客户端的主流版本,并配置到施压引擎上。避免因 SSL 版本不同,造成 SSL 握手计算压力模拟不准确。

浙公网安备 33010602011771号