SSL/TLS 保护什么
TLS 为客户端与服务器之间传输的数据提供三重保护:
- **机密性:**加密可防止没有会话密钥的人读取内容。
- **完整性:**认证加密能检测出应用数据在传输途中是否遭到篡改。
- **服务器认证:**证书可帮助客户端确认连接到的是所请求的域名。
成功的 TLS 握手会验证证书,并确认服务器持有对应的私钥,以证明服务器确实代表该域名,同时建立加密连接。但这不能证明网站本身可信。
TLS 连接的工作原理
HTTPS 经由 TCP 传输时,TLS 握手会在 TCP 连接建立后开始:
- 客户端发送
ClientHello,其中包含支持的 TLS 版本和加密选项。 - 服务器选择兼容的选项并发送证书。
- 客户端检查证书中的域名、到期时间和签名链。
- 双方生成会话密钥,然后交换加密的应用数据。
例如,浏览器向 https://example.com 发送 GET / HTTP/1.1 前,通常会先连接 443 端口并完成这一握手。
SSL 与 TLS 的区别
| 协议 | 状态 | 要点 |
|---|---|---|
| SSL 2.0 和 3.0 | 已淘汰 | 不应启用 |
| TLS 1.2 | 广泛支持 | 使用现代配置时安全 |
| TLS 1.3 | 最新版本 | 移除了过时算法 |
人们仍会说“SSL 证书”,但如今网站实际会将这类证书用于 TLS。SSL 主要作为加密网络连接的俗称保留了下来。
TLS 如何通过代理工作
使用 HTTP 代理 时,HTTPS 客户端通常会要求代理建立隧道:
CONNECT example.com:443 HTTP/1.1
Host: example.com:443
之后,TLS 握手会通过该隧道传输。代理可以看到目标地址和连接元数据,例如时间信息和字节数,但通过标准隧道传输时,代理无法读取加密的 HTTP 标头或正文。隧道内的网站流量始终保持端到端加密。普通 HTTP 代理未加密的是 CONNECT 请求本身,其中包括代理认证信息;HTTPS 代理 还会加密客户端与代理之间的这段链路。
执行 TLS 检查的代理会终止客户端的 TLS 连接,并另行与网站建立第二条 TLS 连接。要让这种方式正常工作,客户端必须信任代理的证书颁发机构。
使用代理会改变网站看到的源 IP,但不会改变客户端的 TLS 行为。网站仍可通过 TLS 指纹识别 对客户端分类。这种方法会分析扩展顺序、支持的算法等握手细节。
常见问题
SSL 和 TLS 一样吗?
不一样。SSL 是 TLS 已淘汰的前身。人们仍经常用“SSL”代指 TLS 或 HTTPS 证书。
代理能读取 HTTPS 流量吗?
如果代理仅承载 TLS 隧道,通常不能。若代理终止 TLS,而且设备信任其提供的证书,代理就能读取流量内容。
SSL/TLS 会隐藏我的 IP 地址吗?
不会。TLS 会加密应用数据,但不会隐藏路由信息。不使用代理时,网站看到的是公网 IP;使用代理后,看到的是代理的出口 IP。