Skip to content

HTTPS 与 TLS/SSL ​

问题 ​

HTTPS 和 HTTP 有什么区别?TLS/SSL 的工作原理是什么?数字证书是做什么用的?HTTPS 的握手过程是什么?

结论 ​

HTTPS vs HTTP ​

HTTPHTTPS
传输明文,可被窃听/篡改SSL/TLS 加密,防窃听、篡改、身份伪装
端口80443
证书不需要需要 CA 颁发的 SSL 证书
性能无加解密开销握手阶段有额外延迟,通信有加解密开销
身份验证无验证服务器身份(数字证书)

HTTP 的安全风险:

  • 信息窃听(中间人可读取明文)
  • 信息篡改(中间人可修改报文)
  • 身份劫持(无法验证服务器真实身份)

TLS/SSL 工作原理 ​

TLS/SSL 的功能基于三类算法协同实现:

① 散列函数(Hash)

常见算法:MD5、SHA1、SHA256。单向不可逆,用于验证数据完整性(防篡改)。

② 对称加密

双方共享同一密钥加解密。常见算法:AES-CBC、AES-GCM、DES。

  • 优点:速度快(加解密性能好)
  • 缺点:密钥如何安全传输是问题

③ 非对称加密

公钥加密,私钥解密(反之也可)。常见算法:RSA、ECC。

  • 优点:无需共享私钥,可安全传输公钥
  • 缺点:加密速度慢

TLS 实际方式:用非对称加密协商出对称密钥,再用对称加密进行通信——兼顾安全与性能。

数字证书与 CA ​

问题:非对称加密仍然有中间人风险——中间人可以替换公钥,伪装成服务器与客户端通信。

解决方案:数字证书 + CA(证书颁发机构)。

CA 用自己的私钥对服务器公钥+信息摘要进行签名,生成数字证书。客户端收到证书时:

  1. 用 CA 的公钥(预置在浏览器/OS 中)解密签名,得到 CA 生成的摘要
  2. 对证书原始信息再次 Hash,生成自己的摘要
  3. 两个摘要一致 → 证书未被篡改 → 服务器公钥可信

HTTPS 握手过程 ​

以 TLS 1.2 为例(简化为 5 步):

  1. 客户端 Hello:发送支持的 TLS 版本、加密算法列表、随机数 ①
  2. 服务端 Hello:确认 TLS 版本和加密算法、发送数字证书、随机数 ②
  3. 客户端验证证书:验证证书有效性;生成随机数 ③,用证书中的公钥加密后发给服务端;附上前面内容的 Hash 值
  4. 服务端解密:用私钥解密得到随机数 ③;发送前面内容的 Hash 值供客户端校验
  5. 双方生成会话密钥:用三个随机数 ①②③ 按约定算法生成对称密钥,后续通信用该密钥加密

HTTPS 如何保证安全 ​

对称密钥协商安全 → 依赖非对称加密(公钥加密传输)
服务器身份可信 → 依赖 CA 数字证书 + 数字签名
密钥不被窃取 → 私钥始终在服务器,公钥公开
数据不被篡改 → Hash 摘要 + 加密通信

HTTPS 的优缺点 ​

优点:

  • 通信加密,防窃听和 MITM 攻击
  • 验证服务器身份,防钓鱼/劫持
  • 现代 SEO 加分,Chrome 对非 HTTPS 标记"不安全"

缺点:

  • 证书需要购买(Let's Encrypt 提供免费证书)
  • 握手阶段有额外 RTT(TLS 1.3 已降为 1-RTT,甚至 0-RTT)
  • 加解密有 CPU 开销(现代硬件已可忽略)

参考来源 ​