跳转至

HTTPS 原理

一、为什么需要 HTTPS

HTTP 明文传输,有三个问题:

  1. 窃听:中间人能看到内容。
  2. 篡改:中间人能改内容。
  3. 冒充:中间人能冒充服务器。

HTTPS = HTTP + TLS/SSL,解决这三个问题。

二、加密算法

1. 对称加密

加密解密用同一把密钥(如 AES)。

  • 优点:快。
  • 缺点:密钥怎么安全传给对方?

2. 非对称加密

公钥加密、私钥解密;私钥签名、公钥验签(如 RSA)。

  • 优点:不需要传密钥。
  • 缺点:慢。

3. 混合加密

HTTPS 实际用:非对称加密协商出一个对称密钥,之后用对称加密传数据

三、TLS 握手过程

简化版:

  1. Client Hello:客户端发支持的 TLS 版本、加密套件、随机数 A。
  2. Server Hello:服务端选加密套件,发随机数 B、证书(含公钥)。
  3. 证书验证:客户端验证证书是否可信(CA 链)。
  4. 生成会话密钥
  5. 客户端用公钥加密一个预主密钥(PreMaster Secret)发给服务端。
  6. 服务端用私钥解密。
  7. 双方用随机数 A、B、PreMaster 算出会话密钥
  8. Finished:双方用会话密钥加密通信。

四、数字证书

证书解决"公钥属于谁"的问题:

  • CA(证书颁发机构)用自己的私钥给网站公钥签名。
  • 浏览器内置 CA 公钥,能验证签名。
  • 如果证书不是可信 CA 签的,浏览器报红警告。

五、HTTPS 解决了什么

问题 解决
窃听 对称加密
篡改 MAC / 摘要
冒充 证书 + CA

六、HTTPS 一定安全吗

  • 证书被劫持(如内网抓包装根证书)。
  • 弱加密套件。
  • 证书过期 / 自签名。

高频追问

  • 为什么不用纯非对称加密?太慢。
  • 为什么要两个随机数?防止重放攻击。
  • TLS 1.3 简化了握手,1-RTT 甚至 0-RTT。