HTTPS (全称:Hypertext Transfer Protocol Secure ),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。
HTTPS不是协议,而是通过SSL/TLS协议提供的安全连接进行的HTTP通信。
学习前我们可以来阅读这篇文章,举的例子很深入浅出
一个故事讲完https
看完这篇文章,我总结了一下,然后用下面这个描述,问了问AI
我的描述
那我现在再来完整的阐述一遍流程:首先大胖和Bill要使用HTTPS进行通信,我们默认Bill是服务器,大胖是客户端,它们决定采用RSA非对称加密的方式传输对称加密的密钥,然后使用对称加密的密钥进行加密通信,在使用RSA之前首先要传Bill的RSA公钥,但是怎么保证在传输Bill的RSA公钥的时候的安全,不被中间人篡改,此时CA(Certificate Authority)登场了,Bill带着自己的信息和自己的RSA公钥来到CA,CA验证是否能给Bill开证书,可以的话,CA使用公开的Hash算法将Bill的信息和RSA公钥转换成消息摘要,然后使用CA的私钥对消息摘要进行加密,这里的加密不是为了保密,而是证明这是CA认证的,加密后得到数字签名,之后将Bill最初带来的信息和Bill的公钥以及这个数字签名(这里其实还有其他的,但是主要是这些)合并为数字证书给到Bill,在之后大胖和Bill通信时,先进行TCP三次握手,然后进行SSL/TSL握手,这个过程Bill向大胖发送这个数字证书,大胖在拿到这个证书后,拿出里面存的Bill的信息和Bill的RSA公钥,使用同样的Hash算法,得到一个新的消息摘要,然后再拿出证书里的数字签名,使用CA的公钥进行解密,拿到里面的消息摘要,然后将这个和新的消息摘要做比对,如果相同则证明中间是安全传输的,大胖可以在客户端生成一个对称密钥,然后用这个证书里的RSA公钥进行加密,传输给Bill,Bill再用自己的RSA私钥进行解密拿到对称密钥,之后的通信信息都用这个对称密钥加密,然后到对方那里再解密,实现安全通信
有关生成对称密钥的部分,我这里讲的不全面哦
🔐 HTTPS 安全通信完整流程(基于 RSA)
-
准备阶段:
- Bill(服务器)生成一对 RSA 密钥(私钥自留,公钥用于申请证书)
- 向 CA 提交 CSR(证书签名请求),包含:身份信息 + 公钥
-
CA 颁发证书:
- CA 验证 Bill 身份(如域名所有权)
- 使用公开 Hash 算法(如 SHA-256)对信息 + 公钥 生成 消息摘要
- 用 CA 的私钥对摘要进行 数字签名
- 将信息、公钥、签名等打包成 X.509 数字证书,发给 Bill
-
客户端请求 HTTPS 页面:
- 大胖(客户端)与 Bill 的服务器建立 TCP 连接(三次握手)
- 发起 TLS 握手,发送
Client Hello(支持的协议、加密套件、随机数)
-
服务器响应:
- Bill 回应
Server Hello(选定协议、加密套件、随机数) - 发送自己的 数字证书
- 发送
Server Hello Done
- Bill 回应
-
客户端验证证书:
- 大胖从证书中提取 Bill 的信息和公钥
- 用相同 Hash 算法重新计算摘要 →
digest_new - 用 CA 的公钥(来自本地信任库)解密数字签名 →
digest_ca - 比对两个摘要:
- 一致 → 证书未被篡改,且由可信 CA 签发
- 不一致 → 报警(如浏览器显示“证书无效”)
-
密钥交换:
- 大胖生成一个 Pre-Master Secret
- 用证书中的 Bill 公钥加密后发送给 Bill
-
生成会话密钥:
- Bill 用自己的私钥解密,得到 Pre-Master Secret
- 双方使用:
- Client Random
- Server Random
- Pre-Master Secret
- 通过标准算法(如 PRF)独立生成相同的会话密钥(Master Secret)
-
完成握手:
- 双方发送
Finished消息(用会话密钥加密) - 验证成功 → TLS 握手完成
- 双方发送
-
加密通信:
- 后续所有 HTTP 数据都使用 对称加密算法(如 AES)和 会话密钥 加密传输