12. 说一下 https 的加密过程
总结
- 客户端发送一个 http 请求,告诉服务器支持哪些 hash 算法。
- 服务端发送证书(公钥、网址、证书机构等)给客户端。
- 验证证书
- 生成随机密码(RSA 签名):对称密码用公钥加密,服务器用私钥解密。进行传输
- 生成对称加密算法
说一下 HTTPS 的加密过程
HTTPS(HyperText Transfer Protocol Secure)是 HTTP 协议的安全版本,通过 SSL/TLS 协议实现数据加密传输,确保客户端与服务器之间的通信安全。
一、HTTPS 的核心作用
作用 | 描述 |
---|---|
身份验证 | 确保访问的是真实的服务器(通过证书验证) |
数据加密 | 防止中间人窃听或篡改通信内容 |
完整性校验 | 确保数据在传输过程中未被篡改 |
二、HTTPS 加密通信流程详解(以 TLS 1.2 为例)
✅ 第一步:客户端发起请求(ClientHello)
- 客户端向服务器发送
ClientHello
消息,包含:- 支持的 TLS 版本
- 支持的加密套件(Cipher Suites)
- 支持的压缩算法
- 随机数(
ClientRandom
)
✅ 第二步:服务器响应(ServerHello)
- 服务器返回
ServerHello
消息,包含:- 选定的 TLS 版本
- 选定的加密套件
- 随机数(
ServerRandom
)
- 同时发送:
- 服务器证书(含公钥)
- 可选:请求客户端证书(双向认证时)
✅ 第三步:客户端验证证书
- 客户端对服务器证书进行验证,主要包括:
- 是否由受信任的 CA(证书颁发机构)签发
- 证书是否在有效期内
- 证书中的域名是否与当前访问域名一致
- 若验证失败,浏览器会提示“证书错误”并中断连接
✅ 第四步:生成预主密钥(Pre-Master Secret)
- 客户端生成一个随机的预主密钥(Pre-Master Secret)
- 使用服务器证书中的公钥对该预主密钥进行加密
- 发送加密后的数据给服务器(
ClientKeyExchange
)
✅ 第五步:服务器解密预主密钥
- 服务器使用自己的私钥解密出预主密钥
- 此时,客户端和服务器都拥有:
ClientRandom
ServerRandom
Pre-Master Secret
✅ 第六步:双方生成主密钥(Master Secret)
- 利用上述三个随机值,通过伪随机函数(PRF)生成主密钥(Master Secret)
- 主密钥用于派生后续通信所需的对称加密密钥
✅ 第七步:切换加密通信
- 客户端发送
ChangeCipherSpec
消息表示之后的数据将使用对称加密 - 发送
Finished
消息(已加密),用于验证握手过程是否被篡改 - 服务器同样切换加密方式,并回复加密的
Finished
消息
✅ 第八步:开始加密数据传输
- 双方使用协商好的对称加密算法和密钥进行数据加密传输
- 常见加密算法包括:
- AES(Advanced Encryption Standard)
- ChaCha20
- 3DES 等
三、加密过程总结图示
[客户端] [服务器]|-------- ClientHello -------->|| ||<------- ServerHello ---------||<------- Certificate ---------||<------- ServerHelloDone -----|| ||-------- ClientKeyExchange -->||-------- ChangeCipherSpec ---->||-------- Finished (encrypted) ->|| ||<------- ChangeCipherSpec ----||<------- Finished (encrypted) -|| ||<-- 加密数据交互(HTTP 请求/响应)-->|
四、常见加密算法与概念说明
名称 | 说明 |
---|---|
RSA | 非对称加密算法,用于加密预主密钥 |
Diffie-Hellman(DH) | 密钥交换算法,支持前向保密(PFS) |
ECDHE | 基于椭圆曲线的 DH 算法,性能更优 |
AES | 对称加密算法,速度快、安全性高 |
SHA | 哈希算法,用于签名和完整性校验 |
CA | 证书颁发机构,负责为服务器颁发可信证书 |
五、HTTPS 为什么安全?
- 身份验证:通过证书机制防止连接到假冒网站
- 加密传输:防止中间人监听通信内容
- 完整性保护:使用 MAC(消息认证码)确保数据未被篡改
- 前向保密(PFS):即使长期密钥泄露,也不会影响历史通信的安全性(需使用 ECDHE 等算法)
六、一句话总结
HTTPS 的加密过程本质上是一个混合加密机制:利用非对称加密建立安全通道,再通过协商出的对称密钥加密实际通信数据,从而实现安全、高效的网络通信。