HTTPS 原理
目录
HTTPS 的核心:SSL/TLS 协议
SSL/TLS 的核心作用
HTTPS 的区别
HTTPS 的工作流程:SSL/TLS 握手与数据传输
阶段 1:TCP 三次握手(基础连接建立)
阶段 2:SSL/TLS 握手(核心安全协商)
1. 客户端发起请求
2. 服务器回应
3. 服务器发送证书
4. 服务器发送密钥交换信息
5. 客户端验证证书并生成主密钥
6. 双方生成会话密钥
7. 客户端通知握手完成
8. 服务器验证并回应
9. 加密数据传输
阶段 3:数据传输阶段
阶段 4:连接关闭
整体过程
HTTPS 的核心:SSL/TLS 协议
SSL(Secure Sockets Layer,安全套接层)协议和 TLS 协议(Transport Layer Security,传输层安全)是一组用于在计算机网络中提供加密通信、身份认证和数据完整性保护的安全协议。
SSL/TLS 的核心作用
简单来说,SSL/TLS 解决了网络通信中的三大核心安全问题:
- 加密(Confidentiality):通过加密算法将传输数据打乱,确保即使数据被窃听,攻击者也无法读懂内容;
- 认证(Authentication):通过数字证书验证通信双方(通常是服务器,可选验证客户端)的真实身份,防止 “中间人攻击”;
- 完整性(Integrity):通过哈希算法检测数据在传输过程中是否被篡改,确保接收的数据与发送的数据一致。
HTTPS 的区别
HTTPS 结合两者优势:用非对称加密传输对称密钥,后续数据用对称加密传输(既保证密钥安全,又提升传输效率)。
HTTPS 的工作流程:SSL/TLS 握手与数据传输
HTTPS 通信可分为两大阶段:SSL/TLS 握手阶段(协商加密规则、交换密钥、验证身份)和数据传输阶段(用协商的密钥加密传输数据)。
阶段 1:TCP 三次握手(基础连接建立)
HTTPS 基于 TCP 协议,通信前需先通过 TCP 三次握手建立可靠连接(确保数据传输的可靠性)。
阶段 2:SSL/TLS 握手(核心安全协商)
握手阶段的目标是:客户端和服务器协商加密算法、验证服务器身份、安全交换对称密钥(“会话密钥”)。步骤如下:
1. 客户端发起请求
- 客户端发起请求,通过 hello 报文,发送支持的 TLS 版本(如 TLS 1.2)、加密套件列表(如
ECDHE-RSA-AES256-GCM-SHA384
)、随机数Client Random
,确认要加密的方式。
2. 服务器回应
- 服务器回应 hello 报文,选择一个加密套件(如
ECDHE-RSA-AES256-GCM-SHA384
),确定 TLS 版本,生成随机数Server Random
,并将这些信息返回给客户端。
3. 服务器发送证书
- 服务端发送证书,包含服务器公钥、域名、证书有效期等信息,用于客户端验证服务器身份。
4. 服务器发送密钥交换信息
- 若使用 ECDHE 等密钥交换算法,服务器会生成临时的椭圆曲线公钥(或 RSA 临时公钥),并使用服务器私钥签名,防止被篡改。
5. 客户端验证证书并生成主密钥
- 客户端验证服务器证书的有效性(检查是否由可信 CA 签发、域名是否匹配、是否过期等);
- 验证通过后,客户端生成随机数
Pre-Master Secret
(预主密钥),并用服务器公钥加密后发送给服务器(RSA 模式),或通过椭圆曲线计算生成共享密钥(ECDHE 模式)。
6. 双方生成会话密钥
- 通过相同的密钥派生算法(如 HKDF)生成主密钥(Master Secret),再进一步生成用于实际加密的会话密钥(对称加密密钥)和MAC 密钥(用于完整性校验)。
7. 客户端通知握手完成
- 客户端使用会话密钥加密一条 “Finished” 消息(包含之前所有握手消息的哈希值),发送给服务器,证明已正确生成会话密钥。
8. 服务器验证并回应
- 服务器解密 “Finished” 消息,验证哈希值是否匹配,确认客户端已正确获取会话密钥;
- 服务器同样用会话密钥加密一条 “Finished” 消息发送给客户端,完成握手。
9. 加密数据传输
- 握手完成后,客户端和服务器使用协商好的对称加密算法(如 AES-GCM)和会话密钥,对后续的 HTTP 请求 / 响应数据进行加密传输,同时通过 MAC 校验确保数据未被篡改。
阶段 3:数据传输阶段
握手完成后,客户端和服务器使用协商好的会话密钥(对称加密)传输所有 HTTP 数据,同时通过哈希算法校验数据完整性。每次传输的数据会被加密为密文,且附加 MAC(消息认证码)用于防篡改验证。
阶段 4:连接关闭
通信结束后,通过 TCP 四次挥手关闭连接。
整体过程
验证身份 --> 协商秘钥 --> 加密传输