什么是 TLS
在 HTTPS 通信中,HTTP 数据不是原样发送,而是由 TLS 这个机制保护。
HTTP 和 HTTPS 的区别有时会被说明为“是否加密”。但是,TLS 的作用不只是加密。让通信内容不容易被第三方读取、让通信途中不容易被篡改,以及确认连接目标服务器,都是重要作用。
本文将整理 TLS 保护什么,以及不保护什么。
什么是 TLS
TLS 是 Transport Layer Security 的缩写,是用于保护网络通信的协议。
在 Web 中,它用于保护浏览器和 Web 服务器之间的通信。当浏览器打开 HTTPS 网站时,HTTP 的通信内容会在受到 TLS 保护的状态下收发。
TLS 主要提供下面三种保护。
| 作用 | 含义 | 说明 |
|---|---|---|
| 机密性 | 让通信内容不容易被读取 | 让通信途中的第三方难以理解数据内容 |
| 完整性 | 更容易检测通信内容的篡改 | 让途中数据被改写时能够被检测 |
| 认证 | 确认连接目标 | 通过服务器证书,确认连接目标是否持有该域名的正当证书 |
也就是说,与其只把 TLS 记成“加密通信的机制”,更准确的是把它理解为同时进行通信内容保护和连接目标确认的机制。
HTTPS 是用 TLS 保护 HTTP
HTTPS 是用 TLS 保护 HTTP 的通信。
HTTP 是浏览器和 Web 服务器交换页面内容、表单数据等的机制。但是,仅靠 HTTP,通信内容不会加密。因此,通信路径上的第三方有读取内容或在途中篡改内容的危险。
HTTPS 会在 TLS 内部进行 HTTP 交换。这样,HTTP 中收发的请求和响应内容,在通信途中会变得难以读取。
| 项目 | HTTP | HTTPS |
|---|---|---|
| 通信内容 | 以明文发送 | 由 TLS 保护 |
| 对窃听的耐性 | 低 | 高 |
| 篡改检测 | 弱 | 通过 TLS 更容易检测 |
| 连接目标确认 | 基本较弱 | 通过服务器证书确认 |
| 主要结构 | HTTP | HTTP over TLS |
HTTPS 并不是处理与 HTTP 不同内容的机制。它是把 HTTP 通信用 TLS 保护后发送的方式。
TLS 保护什么
TLS 保护的中心,是在浏览器和服务器之间流动的通信内容。
通信路径上存在 Wi-Fi 路由器、提供商、组织网络设备、互联网上的中继设备等。如果没有使用 TLS,就有在这些通信路径上被读取内容或被篡改的危险。
TLS 有效时,通信内容会被加密。因此,即使通信途中的第三方取得数据,也很难直接读取 HTTP 的内容。
| 信息 | TLS 的保护 | 说明 |
|---|---|---|
| 页面正文 | 受保护 | 服务器返回的 HTML 和正文内容在通信途中不容易被读取 |
| 表单输入内容 | 受保护 | 登录信息、咨询内容等会被加密 |
| HTTP 头 | 受保护 | 、User-Agent 等 HTTP 头会在 TLS 内部发送 |
| Cookie 的值 | 受保护 | 通信途中不容易读取 Cookie 内容 |
| URL 的路径和查询 | 受保护 | example.com/search?q=... 中相当于 /search?q=... 的部分作为 HTTP 请求受到保护 |
不过,这里说的保护,是针对通信途中第三方的保护。连接目标服务器需要处理请求,因此会解密并读取通信内容。
用服务器证书确认连接目标
TLS 不仅加密通信内容,也会确认连接目标服务器。
访问 HTTPS 网站时,服务器会出示服务器证书。浏览器会确认该证书是否由可信认证机构签发、是否未过期、是否与访问目标域名一致等。
这样可以确认通信对象是否持有预期域名的正当证书。
不过,有服务器证书,并不保证该网站运营者安全,也不保证网站上的信息正确。证书主要确认的是“是否持有对该域名有效的证书”。
也就是说,HTTPS 的锁形图标表示“通信路径受到 TLS 保护”,但并不保证“该网站提供的内容值得信任”。
TLS 加密的范围
TLS 加密的主要是 HTTP 的内容。
例如,Web 页面正文、表单发送内容、Cookie 的值、HTTP 头、URL 的路径和查询字符串等,都会在 TLS 内部发送。
另一方面,即使使用 TLS,通信所需的一部分信息,以及通信外侧的信息仍会留下。
| 信息 | TLS 是否隐藏 | 说明 |
|---|---|---|
| 页面正文 | 容易隐藏 | 作为 HTTP 响应内容受到 TLS 保护 |
| 表单输入内容 | 容易隐藏 | 作为 HTTP 请求正文受到 TLS 保护 |
| Cookie 的值 | 容易隐藏 | 作为 HTTP 头受到 TLS 保护 |
| URL 的路径和查询 | 容易隐藏 | 作为 HTTP 请求内容受到 TLS 保护 |
| 连接目标 IP 地址 | 不隐藏 | 为了把数据包送到通信目标所需 |
| 访问源 IP 地址 | 不隐藏 | 服务器或中继目标能够看到 |
| SNI 等 TLS 连接时的一部分信息 | 视环境可能可见 | 在未使用 ECH 等的环境中,可能成为连接目标域名的线索 |
| DNS 查询 | 作为另一个问题留下 | 普通 DNS 中,查询目标域名可能可见 |
| 通信量 | 不隐藏 | 收发了多少数据有时会被观察 |
| 通信时机 | 不隐藏 | 何时通信有时会被观察 |
这个区别很重要。TLS 保护 HTTP 的内容,但不会让通信本身的存在、通信量、时机、IP 地址都消失。
注意 TLS 的终止点
需要意识到 TLS 保护的是从哪里到哪里的通信。
一般说明中常说“浏览器和 Web 服务器之间会被加密”。不过,在实际 Web 服务中,CDN、负载均衡器、反向代理等有时会成为 TLS 的终止点。
TLS 终止点,是加密通信被解密的地点。
例如,有一种结构是浏览器到 CDN 之间受 TLS 保护,CDN 到源服务器之间通过另一条连接转发。这种情况下,从浏览器看 TLS 的连接目标是 CDN 侧,之后的通信保护取决于服务侧设置。
这并不意味着 TLS 很弱。TLS 是“保护端点之间通信”的机制,而哪个位置成为端点,会因系统结构而变化。
TLS 不是匿名化技术
TLS 不是匿名化技术。
TLS 是用于从通信途中的第三方那里保护通信内容的技术。另一方面,通信内容会到达连接目标服务器。服务器需要处理请求,因此有时可以把握发送的数据、Cookie、登录信息、访问时刻、访问源 IP 地址等。
访问 HTTPS 网站时,通信路径上的第三方更难读取页面内容。但是,连接目标网站本身可以处理被访问的页面、发送的表单内容、登录状态、Cookie 等。
| 项目 | TLS 能否解决 | 理由 |
|---|---|---|
| 通信途中窃听 | 容易解决 | 通信内容会被加密 |
| 通信途中篡改 | 容易解决 | 有篡改检测机制 |
| 防止连接目标服务器查看 | 不能解决 | 服务器需要处理通信内容 |
| 隐藏访问源 IP 地址 | 不能解决 | 服务器侧可能看到访问源 IP |
| Cookie 识别 | 不能解决 | Cookie 用于服务器侧使用者识别 |
| 登录导致与本人关联 | 不能解决 | 行为会与账号关联 |
加密和匿名化的目的不同。
加密是让通信内容不容易被第三方读取的技术。匿名化是让谁在通信、连接到哪里、哪些行为属于同一使用者变得不容易判断的思路。
TLS 对前者很强,但不能单独实现后者。
理解 TLS 的意义
理解 TLS 后,就能不过度评价 HTTPS 的安全性,而是准确评估。
HTTPS 对通信路径上的窃听和篡改是非常重要的对策。在登录、支付、发送个人信息、访问管理画面等场景中,使用 HTTPS 是前提。
另一方面,即使是 HTTPS,信息也会到达连接目标服务器。服务器日志、访问源 IP 地址、Cookie、账号信息、浏览器信息等,会作为与 TLS 不同的问题留下。
因此,理解 TLS 时,需要像下面这样分开思考。
| 视角 | 主要目的 | 与 TLS 的关系 |
|---|---|---|
| 加密 | 让通信内容不容易被第三方读取 | TLS 的核心作用 |
| 完整性 | 检测通信途中的篡改 | TLS 的重要作用 |
| 连接目标认证 | 确认服务器是否持有正当证书 | TLS 的重要作用 |
| 匿名化 | 让使用者或连接关系不容易被判断 | 仅靠 TLS 无法实现 |
| 防跟踪 | 抑制 Cookie 或账号造成的识别 | 需要 TLS 以外的对策 |
TLS 是支撑通信安全性的基础技术。但是,它不是解决所有隐私和匿名性问题的万能机制。
总结
TLS 是 HTTPS 中使用的通信保护核心机制。
TLS 会加密浏览器和服务器之间的通信内容,使通信途中的第三方不容易读取内容。同时,它也让通信途中的篡改更容易被检测,并通过服务器证书确认连接目标。
另一方面,TLS 不是匿名化技术。通信内容会到达连接目标服务器,访问源 IP 地址、服务器日志、Cookie、账号信息等问题会另外留下。
要正确理解 TLS,需要分开考虑“通信内容被加密”和“谁正在访问哪里被隐藏”。
HTTPS 对让通信更安全很重要,但它不会自动实现匿名性或防跟踪。