1. 简介

在日常使用网络服务时,我们习惯性地会在地址栏查看是否出现“锁”图标。这个图标表示当前连接使用了 HTTPS,代表该网站具备一定级别的安全性。

HTTPS 被广泛认为是一种安全的通信方式,但 HTTPS 传输过程中,到底哪些信息是真正加密的?是否存在某些数据可能被窃听?特别是,HTTPS 的 URL 是否会被加密?

本文将围绕这些问题展开讨论。

我们都知道,数字安全和隐私保护的历史几乎与互联网本身一样久远。在 WWW 早期,像 FTP、Telnet、SMTP 等协议一样,HTTP 协议也采用明文传输的方式,这意味着通信路径上的任何中间人都可以截取并读取所有数据。

为了增强安全性,HTTP 协议后来引入了加密机制,即我们熟知的 HTTPS,最初使用 SSL,现在主要使用 TLS。

2. 为什么需要加密?

加密(Encryption)是指通过某种方式对信息进行编码,使得只有通信双方能够理解其内容。它在信息安全中扮演着至关重要的角色,主要实现以下几个目标:

  • 机密性(Confidentiality):防止信息被未经授权的第三方获取
  • 完整性(Integrity):确保信息在传输过程中未被篡改
  • 可用性(Availability):确保信息在需要时可被访问
  • 不可否认性(Non-repudiation):防止发送方否认其发送行为
  • 身份验证(Authentication):确认通信双方的身份
  • 授权(Authorization):确保只有授权用户才能访问资源

现代加密技术依赖于密钥机制,只有通信两端持有正确的密钥才能解密或修改数据。通过增加密钥长度或使用更强的加密算法,可以进一步提升通信安全性。

本文不会深入探讨加密技术细节,相关内容可参考我们之前的文章:对称加密 vs 非对称加密RSA 加密AES 加密

3. HTTPS 的工作原理

HTTPS 的核心在于将加密机制引入 HTTP 协议中,使得通信双方可以进行身份认证和数据加密。通常,HTTPS 会使用证书对服务器进行认证,也可以对客户端进行认证(即双向认证)。

先来回顾一下 HTTPS URL 的结构:

https://[user:password/@<hostname.domain_name>/<resouce_path>[/resource_name][?parameter_1&parameter_2&...] 

其中:

  • userpasswordresouce_pathparameter 等为可选参数
  • hostname.domain_name 用于构建 Server Name Indicator(SNI)

此外,参数也可以通过 HTTP 请求体或头部发送,例如:

POST /test HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

field1=value1&field2=value2

了解这些结构有助于我们判断哪些部分可能未被加密。

一个典型的 HTTPS 通信流程如下图所示:

HTTPs 1

其中:

  1. 客户端发起 DNS 查询,将域名解析为 IP 地址(DNS 查询本身未加密)
  2. 客户端与服务器建立 TCP 连接
  3. 客户端发送 ClientHello 消息,其中包含请求的 Server Name(SNI)
  4. 服务器响应 ServerHello,开始 TLS 握手
  5. 双方协商加密密钥
  6. 后续所有数据(包括 URL、参数、请求体等)均被加密传输

以访问 Baeldung logo 为例,在 Wireshark 抓包工具中可以看到 SNI 是以明文形式发送的:

ClientHello 1

⚠️ 注意:SNI 是唯一在 TLS 握手阶段明文传输的部分。握手完成后,所有通信内容(包括完整的 URL 和参数)都处于加密状态。

4. HTTPS URL 是否加密?

结论:HTTPS 的完整 URL 是加密的。包括路径、参数等应用层数据都在 TLS 握手完成后被加密传输。

但 Server Name Indicator(SNI)部分是明文传输的。SNI 是从 URL 中提取的主机名和域名部分,用于服务器识别虚拟主机并选择正确的证书。

TLS 1.3 标准中提出了加密 SNI 的方案(Encrypted SNI),但目前尚未被广泛支持。主流浏览器如 Chrome(当前版本为 95.0.4638.69)仍使用明文 SNI。

你可以通过 Cloudflare 浏览器安全检查页面 查看你的浏览器是否支持 E-SNI、加密 DNS 查询(DoH/DoT)等安全特性。

5. 代理服务器的影响

代理服务器作为通信路径中的“中间人”,可以用于缓存、安全策略控制、内容过滤等用途。根据配置方式,可分为:

  • 显式代理:用户手动配置代理服务器
  • 透明代理:由网络设备自动配置,用户无感知

5.1 透明代理的潜在风险

  • 可通过 CONNECT 请求获取目标服务器的域名
  • 更严重的是,代理可以伪造服务器证书,实施中间人攻击(MITM)

在这种情况下,如果客户端信任了代理的根证书(例如企业网络中通过组策略部署),浏览器不会提示证书错误。

5.2 如何识别 MITM?

可以通过查看网站证书的签发机构(CA)来判断:

  • ✅ 正常情况下:由知名 CA(如 Let's Encrypt、DigiCert)签发
  • ⚠️ 异常情况:由公司或国家控制的 CA 签发

6. 总结

✅ HTTPS 确保了除 SNI 以外的整个 URL 和通信内容的加密传输。

❌ 但以下信息仍可能被中间人获取:

  • DNS 查询(明文)
  • TLS 握手阶段的 Server Name(SNI,明文)
  • 若拥有服务器私钥,可解密整个通信内容

此外,代理服务器或 MITM 攻击者若能插入证书链,也可能实现对 HTTPS 流量的完整解密。

因此,尽管 HTTPS 提供了强大的安全保障,但并不能做到“绝对隐私”。在敏感场景中,还需结合其他安全机制(如 DoH、E-SNI、双向认证)共同防护。


原始标题:Are HTTPS URLs Encrypted?