要解决的三个问题

HTTPS(即 HTTP over TLS)要解决三件事:

  1. 机密性:传输内容不能被第三方看到;
  2. 完整性:内容不能被篡改而不被发现;
  3. 身份认证:你连接的确实是你要访问的网站,而不是冒充者。

为什么不直接用非对称加密传所有数据

非对称加密(如 RSA、ECC)解决了密钥交换问题,但计算开销大,不适合加密大量数据。

对称加密(如 AES)速度快,但双方需要先共享一个密钥,而在互联网上"安全地共享密钥"本身就是要解决的问题。

TLS 的方案是:用非对称加密协商出一个对称密钥,再用对称加密传输数据。

握手过程(以 TLS 1.2/1.3 的简化流程为例)

TLS 1.2 典型流程:

  1. 客户端发送 ClientHello,支持的密码套件列表、随机数;
  2. 服务端回应 ServerHello,选定密码套件、随机数,并发送数字证书;
  3. 客户端验证证书:是否由可信 CA 签发、域名是否匹配、是否在有效期内;
  4. 客户端用证书中的公钥加密一个"预主密钥"(Pre-Master Secret),发送给服务端;
  5. 服务端用私钥解密,得到预主密钥;
  6. 双方基于预主密钥和之前交换的随机数,各自计算出相同的会话密钥;
  7. 之后的应用数据全部用会话密钥对称加密传输。

TLS 1.3 简化为 1-RTT:把密钥交换算法收敛到少数几个前向安全的算法(如 ECDHE),在第一次往返中就直接完成密钥协商,显著降低了握手延迟。

为什么证书是可信的

信任链的基础是证书颁发机构(CA)。操作系统和浏览器内置了一批可信根 CA 的证书。

  • 网站向 CA 申请证书,CA 验证申请者对域名的控制权后签发;
  • 浏览器收到证书后,验证签名链是否最终指向某个内置的根 CA;
  • 同时检查域名匹配、有效期,以及证书是否已被吊销。

前向安全(Forward Secrecy)

这是现代 TLS 的重要特性:使用临时密钥交换(如 ECDHE),每次会话使用不同的临时密钥对。

这意味着,即使攻击者长期保存了加密流量,并在未来某天获取了服务器的长期私钥,也无法解密过往的会话——因为会话密钥并不由长期私钥加密传输。

一个常见误解

HTTPS 保护的是传输过程。它不保证网站本身不作恶,也不意味着网站内容真实可信。加密通道和网站可信度是两件事。

说明:本文为网络安全协议的公开知识整理。