面试高频:HTTPS 通信流程
HTTPS 的加密流程
接下来说一下 HTTPS 协议是如何进行通信的:
HTTPS 通信使用的 对称加密 + 非对称加密 两者结合的算法
HTTPS 通信时,会先使用 非对称加密 让通信双方都拿到一个 对称密钥
,之后双方通过这个 对称密钥
进行加密通信,通信过程使用的就是 对称加密
为什么要使用两种加密算法的结合呢?
- 对称加密:加密解密过程中使用相同的密钥,速度很快,但是如何让双方都安全的拿到这个密钥比较困难(因此和非对称加密结合,来安全的传输这个对称密钥)
- 非对称加密:加密解密过程中使用一对密钥,即公钥和私钥。公钥是公开的,用于加密;私钥只能自己拿到,用于解密,整个过程相对复杂,比较耗时,一般用于密钥的交换
通过了解这两种算法的区别,也就知道了为什么要使用这两种算法的结合了,HTTPS 既想要对称加密的性能,又想要非对称加密的安全性!
HTTPS 建立连接的流程
HTTPS 是基于 HTTP 协议,添加了 SSL 层来保证了数据传输的可靠性
HTTPS 的通信流程用大白话说的话,总共有 3 个步骤,如下:
1、客户端向服务器请求获取 公钥
2、双方协商产生 对称密钥
3、双方采用 对称密钥 进行加密通信
前两个步骤是建立 SSL/TLS 的过程,HTTPS 是基于 SSL 或 TLS 进行加密的,不过 SSL 已经退出历史舞台了,现在说的 HTTPS 其实就是 HTTP+TLS
使用 HTTPS 通信的话,通信双方先建立 HTTP 通信,也就是通过 TCP 三次握手建立 TCP 连接,之后再进行 TLS 握手 进行 HTTPS 加密通信
那么 TLS 握手的过程总共包含了 4 次通信 ,在 4 次通信之后,TLS 协议也就建立成功了,可以进行 HTTPS 通信了,TLS 握手过程中的 4 次通信如下:
1、第一次通信 ClientHello :客户端向服务端发送加密请求,主要是协商 TLS 版本、随机数(生成后续的对称密钥)
2、第二次通信 ServerHello :服务端向客户端回复,主要协商 TLS 版本、随机数(生成后续的对称密钥)、数字证书(包含公钥)
3、第三次通信 客户端回应 :取出数字证书的公钥,将用于通信的 对称密钥 通过公钥加密发送给服务端
4、第四次通信 服务端最后回应 :使用自己本地的密钥进行解密,得到用于通信的 对称密钥
通过 TLS 握手阶段,双方就可以拿到对称密钥,之后双方就可以使用这个 对称密钥 进行加密通信了
数字证书
这里再补充一下关于数字证书相关的内容
数字证书是由一个双方都信任的第三方机构签发,这个机构就是 CA (Certificate Authority,证书认证机构)
在 TLS 握手的时候,客户端第一次向服务端发起加密请求,此时服务端就会向 CA 申请数字证书,再把数字证书发送给客户端
客户端收到服务端发来的 数字证书 之后,此时客户端并不知道这个数字证书是否合法,万一在传输过程中被篡改了呢?
因此客户端会将 根证书 提前预装在系统内部,当客户端收到数字证书之后,根据本地的根证书去校验这个数字证书是否合法,如果合法的话,客户端拿到证书内部的公钥,就可以使用这个公钥加密信息发送给服务端了,双方在这个过程中通过非对称加密来协商一个对称密钥,之后使用对称密钥进行加密传输即可
数字证书中包含的内容:持有者的公钥、用途、颁发者、有效时间等信息
签发证书的流程如下: