步骤 | 角色 | 动作 | 技术要点 | 备注/原理解释 |
0. 准备 | CA | 生成自己的根证书(内含 CA 公钥),预装到操作系统和浏览器中。 | CA 的私钥由 CA 自己绝对保密。 | 公钥和私钥是成对生成的,数学上相关联。用私钥加密的数据,只能用对应的公钥解密;反之亦然。 从公钥无法推算出私钥。 |
1. 申请 | 网站 | 生成自己的公钥和私钥。向 CA 提交申请(含自己的公钥、域名、公司信息等)。 | 私钥由网站自己保密,绝不外传。 | 网站的私钥用于后续解密用户发来的数据,因此必须只存在于服务器端。 |
1. 签发 | CA | 审核通过后,用自己的私钥对网站的信息进行数字签名,生成SSL证书,发给网站。 | 数字签名 = 用 CA 私钥加密(网站信息 + 网站公钥) | CA 的私钥用于“签名”,相当于给网站的身份材料盖上一个不可伪造的章。由于只有 CA 有这把私钥,任何人都无法伪造这个签名。 |
2. 连接 | 浏览器 | 访问 https:// 开头的网址。 | 浏览器发起 TLS 握手请求。 | HTTPS 默认使用 443 端口。 |
3. 出示 | 网站 | 服务器将 SSL 证书发送给浏览器。 | 证书是公开的,明文传输也无妨。 | 证书中包含了网站的公钥、网站身份信息以及 CA 的数字签名。 |
4. 验证 | 浏览器 | 用本地预存的CA 根证书(内含 CA 公钥)去解密证书上的数字签名。 | 如果能成功解密出网站的信息 → 证明这个签名确实是由 CA 的私钥加密的 → 证书真实可信。 | 验证的本质:CA 公钥能解开的东西,一定是 CA 私钥锁上的。因为公私钥是唯一配对。这不需要联网,因为 CA 公钥已经预装在本地。 |
5. 生成 | 浏览器 | 验证通过后,生成一个临时的会话密钥(对称加密密钥)。 | 每次访问都会生成全新的会话密钥。 | 这个密钥用于本次会话的加密,用完即弃。即使被破解,也无法解密历史通信(前向安全)。 |
6. 加密 | 浏览器 | 用证书中的网站公钥对会话密钥进行加密,发送给服务器。 | 网站公钥只能用于加密,无法解密。 | 加密后的会话密钥只有持有对应网站私钥的服务器才能解开。中间人拿到也是乱码。 |
7. 解密 | 网站 | 服务器用自己的私钥解密,得到会话密钥。 | 私钥只存在于服务器端,绝不传输。 | 这是私钥的唯一用途:解开用对应公钥加密的东西。 |
8. 通信 | 双方 | 此后所有 HTTP 数据(请求头、正文、Cookie 等)都用这个会话密钥进行对称加密传输。 | 对称加密算法(如 AES-256)速度快,适合大数据量。 | 双方持有同一把临时钥匙,你发我用它加密,我发你用它解密。即使中间人截获,因为没有这把钥匙,看到的全是乱码。 |
9. 结束 | 双方 | 会话结束,会话密钥被丢弃。下次访问重新生成。 | 每次会话独立,互不影响。 | 保证前向安全:一次会话的密钥泄露,不影响其他会话。 |