HTTP 与 HTTPS 本质上是一样的,只 HTTPS 在 HTTP 基础上加了一层安全层
HTTPS 是在 HTTP 的基础上,提供了对数据加密的支持
保证数据
- 私密性
- 完整性
用于
从而非法获取通信数据
HTTPS 协议中
- 数据是加密传输,利用非对称公钥加密机制
- 保证数据不被篡改
- 认证通信双方身份
- 基本避免中间人攻击
TLS 握手机制
HTTPS 通信加密是使用 TLS 协议实现
- TLS Transport Layout Security 安全传输层协议
- 前身是 SSL Secure Sockets Layer 安全套接字协议
为网络通信提供安全及数据完整性的一种安全协议,对网络连接时行加密。
在客户端和服务器正常通信之前 (HTTP 握手之前),会有一个握手过程。
以浏览器访问 HTTPS 网站,且 HTTPS 网站服务器提供单向认证为例描述握手过程(握手过程根据 Key 的交换算法的不同而不同,比如 RSA 、DiffieHellman ,这里以 RSA 为例)
- 浏览器发起 ClientHello 消息,包含支持的 TLS 版本,加密算法集合(Cipher Suite),随机数
- 服务器
- 发送 ServerHello 消息,包含双方共同支持的 TLS 版本,加密算法集,另一个随机数
- 然后发送 Certificate 消息,附加服务器的证书
- 最后发送 ServerHelloDone 消息
- 浏览器接收消息后
- 验证服务器证书是否为受信任的证书机构(CA)签发
- 是否真实的服务器(认证)
- 使用证书附带的公钥生成 premaster secret 作为 ClientKeyExchange 消息体发送给服务器
- 服务器收到后使用私钥解密 premaster secret
- 随后浏览器和服务器
- 使用 premaster secret 和之前生成的服务器 + 浏览器全部随机数
- 生成相同的 master key 用于加密和解密后续的所有通信
- 使用 premaster secret 和之前生成的服务器 + 浏览器全部随机数
- 浏览器
- 发送 ChangeCipherSpec 消息
- 然后发送使用 master key 加密的 finished 消息
- 服务器接收并验证,然后同样给浏览器发送 ChangeCipherSpec 消息和使用 master key 加密的 finished 消息,浏览器接收并验证
- 握手完成