Skip to main content

HTTPS

什么是HTTPS

HTTPS是基于HTTP实现安全通信协议。

整个协议过程由四次握手组成,其中涉及到的加密方式主要有堆成加密和非对称加密。也就是HTTPS采用的混合加密的方式实现安全保障。

采用混合加密的原因主要是基于性能的考虑,对称加密性能由于非对称加密。

请介绍HTTPS四次握手

  • 第一次握手
    • 客户端发送ClientHello消息,并附带TLS版本号、客户端生成的随机数
  • 第二次握手
    • 服务端接收到ClientHello消息,回复ServerHello消息,并附带服务端生成的随机数、证书、公钥等
  • 第三次握手
    • 客户端接收到ServerHello消息,会先验证证书合法性
    • 然后生成一个随机数,并结合之前两次生成的随机数,计算一个摘要,并将二者使用公钥加密生成密文,将密文发送到服务端
  • 第四次握手
    • 服务端基于私钥解密,并结合摘要验证消息合法性,获取客户端生成对称密钥,后续使用该密钥进行加密与解密。

HTTPS一定安全吗

一般来说,HTTPS是安全的,但在某些特殊场景下,HTTPS仍旧存在风险

  1. 密钥泄露:当密钥泄露后,危险性不言而喻,攻击者可以自行伪造请求数据。
  2. 中间人攻击:通过中间服务器,伪造网站诱导用户输入敏感信息,从而截取用户数据。中间人攻击可以分为两种情况
    • 用户能感知到证书风险:因为浏览器可以识别伪造证书,因此警惕性较高的用户可以避免信任风险证书。
    • 用户无法感知到证书风险:通过恶意攻击用户服务器,注入风险证书,从而使得异常证书无法被识别,这里需要主要证书的扫描验证时间。

如何抓包HTTPS数据

通过中间人服务器的方式,伪造证书,并让客户端信任

HTTPS加密算法

HTTPS常用加密算法有两种,分别式RSA和ECDHE算法

RSA是传统的对称加密算法,当私钥泄露后,服务请求将不可靠。

ECDHE则在RSA的基础之上,随机生成新的公钥密钥,双方交换,从而确保即使黑客永远无法获取私钥。

介绍下公钥密钥原理

公钥密钥是非对称加密。即在加解密的过程中,存在两把密钥,分别是公钥和密钥,其中密钥用户自行保存,不可被泄露。 而公钥而可以对外发布。

如果简单的理解非对称加密,我们可以比喻这样一个场景,电子信箱场景。

每一个打算投放信件的同学,需要有指定的邮票才可以打开邮箱,并将信件投放到邮箱中。这时的邮票就类似公钥,对数据进行加密。

而邮递员则可以通过钥匙将信件取出,这时邮递员手中的钥匙就类似私钥,可以解密用户的数据。

HTTPS如何优化

优化的前提是需要知道性能瓶颈在哪。在HTTPS中,瓶颈主要就是四次握手引入的性能问题。

最简单的方式就是堆硬件资源。

此外,我们可以通过开启会话复用来提升性能。在nginx中通过开启ssl_session_cache可以开启会话复用功能。

开启会话复用后,可以通过两次握手来实现HTTPS验证。

我们还可以通过升级TLS版本来提升,在TLS1.3版本中,可以实现0次握手来HTTPS验证,原理就是将数据和session会话信息一起发送给服务端,由服务端进行验证与处理。