HTTP 和 HTTPS 的区别
打开网站时,浏览器和服务器会交换数据。
Web 交换数据使用的基本机制是 HTTP。 而为了安全进行 HTTP 通信而使用的机制是 HTTPS。
HTTPS 并不只是“加密通信内容的机制”。 重要的是,它能让通信途中第三方的偷看、篡改、冒充更难发生。
因此,HTTPS 中主要有下面三点很重要。
- 让通信内容在途中不容易被读取
- 让通信内容在途中不容易被篡改
- 更容易确认通信对象是否是预期对象
也就是说,HTTPS 是应对中间人攻击时非常重要的机制。
不过,HTTPS 不是匿名化技术。 即使使用 HTTPS,访问也会到达连接目标网站。 另外,访问源 IP 地址、、登录状态、访问日志等会作为另一个问题留下。
本文将整理说明 HTTP 和 HTTPS 的区别、HTTPS 会保护什么,以及即使使用 HTTPS 仍可能可见的内容。
什么是 HTTP
HTTP 是用于在 Web 上交换数据的通信规则。
用浏览器打开网站时,浏览器会向服务器发送请求。 例如“请发送这个页面的 HTML”“我想取得这张图片”等请求。
服务器会对这个请求返回 HTML、图片、CSS、JavaScript 等数据。
这种用于浏览器和服务器之间请求与响应交换的机制就是 HTTP。
HTTP 本身是 Web 通信的基础。 但是,仅靠 HTTP 没有保护通信内容的机制。
HTTP 中,通信内容不会加密。 因此,通信路径上的第三方有可能读取内容、改写内容,或冒充成假的通信对象。
| HTTP 的弱点 | 说明 |
|---|---|
| 容易被偷看 | 通信内容不加密,因此有在途中被读取的危险 |
| 容易被篡改 | 页面内容或发送内容有在通信途中被改写的危险 |
| 容易被冒充 | 很难确认通信对象是否真的是预期服务器 |
例如,如果用 HTTP 的登录表单发送密码,密码可能在通信途中被看到。 此外,用 HTTP 读取的页面内容可能在途中被改写,插入假的输入表单或恶意脚本。
HTTP 是 Web 通信的基础,但原样使用会有很大的安全问题。
什么是 HTTPS
HTTPS 是在安全通信通道中进行 HTTP 通信的机制。
更准确地说,HTTPS 是在名为 TLS 的安全通信层之上使用 HTTP。 本文不会处理 TLS 的细节机制,但理解 HTTPS 时,可以把它看作“用 TLS 保护 HTTP 的通信内容”。
HTTPS 中重要的是下面三点。
| 要素 | 作用 | 说明 |
|---|---|---|
| 加密 | 让通信内容不容易被读取 | 让通信途中的第三方难以直接读取密码或表单内容 |
| 篡改检测 | 能够发现通信内容被改写 | 如果途中数据被改变,就不容易作为正确通信被接受 |
| 通信对象确认 | 确认是否在与预期对象通信 | 使用证书等确认连接目标服务器是否是正当对象 |
HTTPS 的强度在于这三点组合在一起。
仅有加密并不充分。 例如,即使通信内容被加密,如果攻击者能冒充成假服务器并让使用者连接到该假服务器,就不能说安全。
因此,HTTPS 不仅保护通信内容,也会使用确认机制,确认正在通信的对象是否是预期网站。
HTTP 和 HTTPS 的区别
HTTP 和 HTTPS 的区别,不只是 URL 看起来是 http[:]// 还是 https[:]//。
HTTP 中,浏览器和服务器的通信不会受到保护。 HTTPS 中,会在浏览器和服务器之间建立安全通信通道,并在其中进行 HTTP 交换。
| 项目 | HTTP | HTTPS |
|---|---|---|
| URL 开头 | http[:]// | https[:]// |
| 通信内容加密 | 不加密 | 加密 |
| 通信内容偷看对策 | 弱 | 强 |
| 通信内容篡改对策 | 弱 | 容易检测篡改 |
| 通信对象确认 | 基本较弱 | 使用证书等确认 |
| 对中间人攻击的耐性 | 低 | 高 |
| 匿名化 | 不进行 | 不进行 |
把 HTTPS 理解为“只是给 HTTP 加了加密”稍微不够。 更准确地说,它是把 HTTP 通信包在安全通信通道中,使偷看、篡改、冒充更难发生的机制。
什么是中间人攻击
中间人攻击是指第三方进入浏览器和服务器之间,偷看通信、改写通信,或冒充通信对象的攻击。
使用者以为自己在访问真正的网站,但通信途中攻击者可能正在查看内容。 攻击者也可能改写通信内容,插入假的登录表单或恶意代码。
HTTP 对这类攻击较弱。
HTTPS 会加密通信内容,检测篡改,并确认通信对象。 因此,中间人攻击更难成立。
| 攻击者想做的事 | HTTP 时 | HTTPS 时 |
|---|---|---|
| 读取通信内容 | 有被读取的危险 | 很难作为明文读取 |
| 偷看密码 | 风险高 | 通信途中不容易偷看 |
| 改写页面内容 | 有被改写的危险 | 篡改容易被检测 |
| 让使用者连接假服务器 | 使用者不容易察觉 | 通过证书验证更容易防止 |
| 冒充通信对象 | 相对容易 | 没有正当证书则困难 |
HTTPS 的本质就在这里。
重要的不只是“通信内容被加密”, 还包括能够确认“途中内容是否被改写” 以及“正在通信的对象是否是预期对象”。
HTTPS 会保护什么
HTTPS 主要保护的是在浏览器和服务器之间流动的 HTTP 通信内容。
例如,下面这些信息会因为 HTTPS 而在通信途中更不容易被读取。
| 被保护的内容 | 说明 |
|---|---|
| 密码 | 登录表单中输入的密码在通信途中更不容易被读取 |
| 表单输入内容 | 姓名、邮件地址、咨询内容等在通信途中更不容易被读取 |
| 页面内容 | 显示页面的内容在通信途中更不容易被读取或篡改 |
| 请求内容 | 浏览器发给服务器的内容更容易受到保护 |
| 响应内容 | 服务器返回给浏览器的内容更容易受到保护 |
| Cookie | 通信中收发的 Cookie 更不容易在途中被偷看 |
特别重要的是密码和 Cookie。
Cookie 有时用于维持登录状态或识别使用者。 如果 Cookie 在通信途中被盗,有些情况下会有被冒充本人访问的危险。
HTTPS 中,Cookie 也会在加密通信通道内发送,因此通信途中更不容易被偷看。
不过,使用 HTTPS 并不意味着 Cookie 相关问题全部解决。 Cookie 的保存方法、网站侧设置、浏览器环境、终端安全性等会作为其他问题留下。
即使是 HTTPS,内容也会到达连接目标服务器
HTTPS 是从通信途中的第三方那里保护内容的机制。 它不是对连接目标网站隐藏内容的机制。
例如,在 HTTPS 登录表单中输入密码时,密码在通信途中不容易被读取。 但是,这些信息会到达执行登录处理的网站服务器。
这是理所当然的。 因为服务器要处理登录,就必须接收发送来的信息。
HTTPS 保护的范围主要是通信路径上。
| 对象 | HTTPS 的作用 | 说明 |
|---|---|---|
| 通信途中第三方 | 强力防护对象 | 更容易防止偷看、篡改、冒充 |
| 连接目标服务器 | 通信对象 | 请求内容会到达服务器 |
| 使用者的 IP 地址 | 不直接隐藏 | 仅靠 HTTPS 不会隐藏访问源 IP 地址 |
| 登录中的账号 | 不直接隐藏 | 登录中的行为会与账号关联 |
也就是说,HTTPS 是“为了防止途中的偷看和篡改的机制”。 它不是“对连接目标隐藏自己信息的机制”。
即使是 HTTPS,仍可能可见的内容
即使使用 HTTPS,也并不是所有信息都会隐藏。
通信内容会受到保护。 但是,访问源相关信息、连接目标相关信息、网站侧接收的信息,是另一个问题。
| 信息 | 可能可见的对象 | 说明 |
|---|---|---|
| 访问源 IP 地址 | 连接目标服务器等 | 网站侧可以把握从哪个 IP 地址访问 |
| 访问时刻 | 连接目标服务器等 | 何时访问可能作为日志记录 |
| 请求内容 | 连接目标服务器 | 即使是 HTTPS,内容也会到达发送目标服务器 |
| Cookie | 连接目标网站 | 有时用于识别同一使用者或浏览器 |
| 登录状态 | 连接目标网站 | 如果已登录,行为会与账号关联 |
| 访问日志 | 连接目标网站 | 看过哪个页面、做过什么操作可能被记录 |
| 浏览器信息 | 连接目标网站 | User-Agent 等信息可能被发送 |
| 连接目标相关信息 | 因通信环境而异 | 即使通信内容加密,也可能推测正在连接哪个网站 |
这里重要的是,把“通信内容”和“通信事实”分开。
HTTPS 会保护通信内容。 但是,它不会自动隐藏从哪个 IP 地址访问、何时访问、使用哪个账号登录等信息。
另外,在 HTTPS 中,完整 URL 并不是总是会被第三方完全看见。 页面路径和表单内容等会作为通信内容受到保护。 另一方面,与连接目标域名相关的信息,可能因通信环境而可见。
因此,使用 HTTPS 并不意味着访问痕迹和识别信息也会消失。
HTTPS 不是匿名化技术
HTTPS 不是匿名化技术。
HTTPS 的目的主要是下面三点。
- 让通信内容在途中不容易被读取
- 让通信内容在途中不容易被篡改
- 更容易确认通信对象是否是预期对象
这和匿名化是不同的话题。
思考匿名性时,需要分开“通信内容是否受到保护”和“谁访问了是否被隐藏”。
HTTPS 与前者强相关。 但是,它不会直接解决后者。
| 视角 | HTTPS 能否解决 | 说明 |
|---|---|---|
| 通信内容偷看对策 | 在通信路径上很强 | 让途中不容易读取内容 |
| 通信内容篡改对策 | 在通信路径上很强 | 让途中不容易改写内容 |
| 通信对象确认 | 可以 | 使用证书等确认连接目标 |
| IP 地址隐藏 | 不能 | 仅靠 HTTPS 不会隐藏访问源 IP 地址 |
| Cookie 识别 | 不能 | 网站侧识别是另一个问题 |
| 登录状态隐藏 | 不能 | 登录中的行为会与账号关联 |
| 访问日志删除 | 不能 | 网站侧日志保存与 HTTPS 是另一个问题 |
“HTTPS 就是匿名”这种理解是错误的。
HTTPS 是让通信更安全的技术。 它不是用于产生匿名性的技术。
正确理解 HTTPS 的视角
要正确理解 HTTPS,需要分开思考“从谁那里保护什么”。
HTTPS 主要防护的对象是通信路径上的第三方。
例如,同一 Wi-Fi 中的第三方、通信路径上的设备、恶意中继者等,HTTPS 会让他们更难偷看、篡改通信内容,或冒充成假对象。
另一方面,连接目标网站是通信的最终对象。 因此,发送的内容会到达网站侧。
| 对象 | HTTPS 容易防止的事 | HTTPS 无法防止的事 |
|---|---|---|
| 通信途中第三方 | 偷看、篡改、冒充 | 终端本身被入侵 |
| 连接目标网站 | 通信途中泄露 | 网站侧记录日志或账号识别 |
| 同一 Wi-Fi 使用者 | 偷看通信内容 | 访问目标推测并不会完全消失 |
| 假服务器 | 没有正当证书时更容易被检测 | 使用者忽略警告时的危险 |
HTTPS 是非常强力的机制,但并非万能。
例如,浏览器显示证书相关警告时,如果无视警告继续前进,HTTPS 带来的安全性会大幅下降。 另外,如果终端本身感染恶意软件,即使使用 HTTPS 通信,输入内容也可能在终端侧被盗。
HTTPS 对网络上的偷看、篡改、冒充是强防御。 但是,终端安全性、网站侧管理、账号处理、Cookie、日志等需要另外考虑。
总结
HTTP 是用于在 Web 上交换数据的基本机制。 但是,仅靠 HTTP,通信内容不会加密,有在通信途中被偷看或篡改的危险。
HTTPS 是在安全通信通道中进行 HTTP 通信的机制。
HTTPS 的重要作用有下面三点。
- 让通信内容在途中不容易被读取
- 让通信内容在途中不容易被篡改
- 更容易确认正在通信的对象是否是预期对象
因此,HTTPS 是应对中间人攻击时非常重要的机制。
不过,HTTPS 不是匿名化技术。 即使使用 HTTPS,请求也会到达连接目标网站。 另外,访问源 IP 地址、Cookie、登录状态、访问日志等会作为其他问题留下。
HTTPS 是让通信更安全的技术。 特别是,它对防止通信路径上的偷看、篡改、冒充很重要。
但是,它不是隐藏谁访问了的技术。
思考匿名性时,需要分开 HTTPS 能保护的范围和 HTTPS 不能保护的范围。 HTTPS 是重要前提,但仅靠 HTTPS 并不会让匿名性成立。