Skip to content

HTTPS 比 HTTP 多做了什么? ​

HTTPS 是跑在 TLS 上的 HTTP。它用证书确认服务器是谁,用对称密钥加密之后的数据,并用校验和防止内容被改。TLS 1.3 的完整握手是一轮往返。

原理 ​

握手要解决三件事:机密性、完整性、身份。

  1. 客户端送出支持的版本、密码套件和随机数(ClientHello)。
  2. 服务器选定套件,返回证书和密钥交换参数(ServerHello)。
  3. 客户端用系统里的信任链验证证书:是否由可信 CA 签发、域名是否匹配、是否过期或被吊销。
  4. 双方用 ECDHE 这类临时密钥交换算出共享密钥。之后的 HTTP 用对称加密传输,因为对称加密更快。

临时密钥交换的好处是,即使服务器的长期私钥以后泄露,过去录下来的流量也不能被解开(前向安全)。

证书解决的是「对面是不是这个域名」,不是「这个网站没有漏洞」。XSS、业务逻辑问题在 HTTPS 上照样存在。

追问 ​

为什么不全程用非对称加密?

非对称加密慢,不适合页面和接口的数据量。实际只在握手时用它(或椭圆曲线密钥交换)协商一把对称密钥。

和 HTTP/2 的关系?

浏览器里的 HTTP/2 基本都跑在 TLS 上。一个连接可以多路复用很多流,不再为每个文件做 TCP 慢启动。HTTP/3 改用 QUIC,把传输和加密放在 UDP 上,少一轮握手的等待。

易错点 ​

  • 把 HTTPS 的开销说成「每次请求都做完整非对称加密」。握手之后是对称加密,连接还能复用。
  • 证书校验失败时,加密仍然可能在进行,但你不知道对面是谁。身份和加密是两件事。
  • HTTPS 不防止应用层注入。

相关 ​