一文读懂 HTTPS 协议
1. HTTPS 是什么?
-
HTTPS 协议 = HTTP 协议 + SSL/TLS 协议, 在 HTTP 协议传输过程中, 需要用 SSL/TLS 对数据进行加密解密, HTTP 对加密后的数据进行传输
-
SSL: SSL 的全称是 Secure Sockets Layer, 是安全套接层协议, 是为网络安全和数据完整性的一种安全协议
-
TLS: TLS 的全称是 Transport Layer Security, 是安全传输层协议
-
HTTPS 为了兼顾安全与效率, 同时采用了对称加密和非对称加密. 数据是被对称加密传输的, 对称加密过程需要客户端的一个密钥, 为了保证该密钥能够安全传输到服务器端, 采用了非对称加密对该密钥进行了加密传输. 总的来说, 对数据进行了对称加密, 对称加密的密钥采用非对称加密传输到服务端
-
下图是 HTTPS 通信的过程
2. 基础概念详解
- 明文: 未经过加密的原始数据
- 密文: 明文经过加密算法加密后, 变成密文, 从而保证原始数据的安全. 密文也可以被解密, 得到原始数据
- 密钥: 密钥是一种参数, 它是由明文转化成密文, 密文转化成明文的过程中输入的参数. 密钥分为对称密钥和非对称密钥, 分别应用在对称加密和非对称加密中;
- 对称加密: 通信双方采用同一个密钥, 常见的对称加密算法有: DES,3DES,TDEA,Blowfish,RC5,IDEA
- 非对称加密: 非对称加密采用一对密钥, 即公钥和私钥, 且两者成对出现. 私钥自己保存, 不能对外泄露, 公钥任何人都可以得到, 常见的非对称加密的算法有: RSA, Elgamal、Rabin、D-H、ECC
3. 具体步骤
一次 HTTPS 请求, 实际包含了两次 http 传输, 具体步骤如下:
-
- 客户端向服务端发送 HTTPS 请求, 至服务端的 433 端口(HTTP 为 80 端口);
-
- 服务端有一对密钥, 公钥和私钥, 是用来进行非对称加密使用的, 服务端保存私钥, 并把公钥发送给客户端;
-
- 客户端收到服务端的证书后, 会对证书进行检查, 验证其合法性, 如果验证失败, 则 HTTPS 无法继续传输. 如果验证成功, 客户端会生成一个随机数(这个随机数就是用来加密数据的密钥, client key),使用公钥对随机数进行加密, 第一次 HTTP 请求结束;
-
- 客户端发起第二个 HTTP 请求, 将使用公钥加密后的客户端密钥发送给服务端;
-
- 服务端使用私钥解密得到客户端密钥, 然后使用客户端密钥对数据进行加密, 发送给客户端;
-
- 客户端得到服务端发送过来的密文后, 使用客户端密钥对密文解密, 得到数据.第二次HTTP请求结束, 整个 HTTPS 传输完整~