HTTPS 标头是否加密?

Are HTTPS headers encrypted?

提问人:Dan Herbert 提问时间:10/9/2008 最后编辑:PrasadDan Herbert 更新时间:4/24/2023 访问量:319641

问:

当通过HTTPS发送数据时,我知道内容是加密的,但是我听到的关于标头是否加密或标头加密了多少的答案不一。

加密了多少 HTTPS 标头?

包括 GET/POST 请求 URL、Cookie 等。

安全 POST 加密 HTTPS GET

评论

21赞 Neil McGuigan 3/19/2015
基于 HTTPS 的 HTTP 标头是加密的,也不是 HTTP 压缩的(即使正文是加密的)。这使得它们不太容易受到与压缩相关的攻击,例如 BEAST

答:

696赞 Greg 10/9/2008 #1

所有 HTTP 标头都已加密。 这就是为什么虚拟主机上的 SSL 不能很好地工作的原因 - 您需要一个专用的 IP 地址,因为 Host 标头是加密的。

服务器名称标识 (SNI) 标准意味着,如果使用 TLS,则主机名可能不会加密。此外,无论您是否使用 SNI,TCP 和 IP 标头都不会加密。(如果是,您的数据包将不可路由。

评论

4赞 Pacerier 12/12/2014
@Greg,既然虚拟主机网关已授权,网关不能对它们进行解密,观察主机标头,然后确定将数据包发送到哪个主机?
3赞 Teddy 11/16/2015
Afaik URL 本身未加密。
9赞 Dmitry Polushkin 2/2/2017
@Teddu“URL 本身未加密”是什么意思。它是加密的,因为它是标头的一部分。
2赞 Bochen Lin 1/10/2018
如果使用 Fiddler 捕获 https 通信,它仍然会显示一些标头,为什么?特别是,当互联网连接是通过需要身份验证的代理时,它会在第一次发送时获得 407 后重新发送请求时显示 Proxy-Authorization 标头。
3赞 Nux 12/5/2019
@Bochen Pegasus 的方式相同。如果你在HTTPS隧道的两端,那么你可以看到所有内容。同样,我可以在浏览器开发工具中看到任何内容。
54赞 blowdart 10/9/2008 #2

使用 SSL 时,加密是在传输级别进行的,因此在发送请求之前进行加密。

因此,请求中的所有内容都是加密的。

评论

0赞 Prateek Joshi 2/10/2017
由于SSL发生在传输层,并且数据包中的目标地址的分配(在标头中)发生在网络层(在传输层下方),那么标头是如何加密的呢?
0赞 Aquarelle 4/26/2017
@PrateekJoshi 因为 HTTP 标头位于应用程序层,因此默认情况下,由于下层/祖先层被加密,因此是加密的。
131赞 mdb 10/9/2008 #3

标头是完全加密的。通过网络“明文”传递的唯一信息与SSL设置和D / H密钥交换有关。这种交换经过精心设计,不会向窃听者提供任何有用的信息,一旦发生,所有数据都会被加密。

评论

7赞 Dori 5/7/2016
并非所有 SSL 设置都涉及 DH
51赞 poolie 11/27/2016
有点迂腐:客户端和服务器的 IP 地址、服务器的主机名以及有关其 SSL 实现的信号对窃听者很有用,并且是可见的。
56赞 Christian C. Salvadó 10/9/2008 #4

HTTPS(基于 SSL 的 HTTP)通过 SSL tunel 发送所有 HTTP 内容,因此 HTTP 内容和标头也已加密。

58赞 AviD 10/10/2008 #5

HTTP 版本 1.1 添加了一种特殊的 HTTP 方法 CONNECT - 旨在创建 SSL 隧道,包括必要的协议握手和加密设置。
此后的常规请求都封装在SSL隧道中,包括标头和正文。

评论

0赞 curiousguy 7/18/2018
何时使用 CONNECT 创建 SSL 隧道?
0赞 avp 2/15/2020
@curiousguy tools.ietf.org/html/rfc7231#section-4.3.6
95赞 Andrew Jay 7/22/2015 #6

老问题的新答案,对不起。我以为我会添加我的 $.02

OP 询问标头是否已加密。

它们是:在运输途中。

它们不是:当不在运输途中时。

因此,浏览器的 URL(在某些情况下还有标题)可以在标头中显示查询字符串(通常包含最敏感的详细信息)和一些详细信息;浏览器知道一些标头信息(内容类型、Unicode 等);浏览器历史记录、密码管理、收藏夹/书签和缓存页面都将包含查询字符串。远程端的服务器日志还可以包含查询字符串以及一些内容详细信息。

此外,URL 并不总是安全的:域、协议和端口是可见的 - 否则路由器不知道将您的请求发送到哪里。

此外,如果你有一个HTTP代理,代理服务器知道地址,通常他们不知道完整的查询字符串。

因此,如果数据正在移动,它通常会受到保护。如果它不在传输中,则未加密。

不是吹毛求疵,但最后的数据也是解密的,可以随意解析、读取、保存、转发或丢弃。而且,任何一端的恶意软件都可以拍摄进入(或退出)SSL协议的数据快照 - 例如HTTPS内部页面内的(坏)Javascript,它可以偷偷地对日志记录网站进行http(或https)调用(因为对本地硬盘的访问通常受到限制且无用)。

此外,Cookie 也不会在 HTTPS 协议下加密。想要将敏感数据存储在 cookie(或其他任何地方)的开发人员需要使用自己的加密机制。

至于缓存,大多数现代浏览器不会缓存HTTPS页面,但这一事实不是由HTTPS协议定义的,它完全取决于浏览器的开发人员,以确保不缓存通过HTTPS接收的页面。

因此,如果您担心数据包嗅探,您可能没问题。但是,如果您担心恶意软件或有人窃听您的历史记录、书签、cookie 或缓存,那么您还没有出水。

评论

40赞 12/23/2016
我知道好的答案在上面,但这再次插入了错误的信息。除非使用 SNI,否则域可见。除 IP 和 TCP 之外的协议可见。你无法判断我使用的是HTTP 1.1、SPDY还是HTTP2。在这两个端点上可见的内容是无关紧要的,因为加密的目标不是使事物不可见,而是使事物对受信任方可见。因此,端点隐含在问题中,大约 2/3 的答案可以被删除。代理信息应该是:如果您使用 HTTPS 代理,那么它确实可以访问所有内容
6赞 DylanYoung 12/1/2017
您的链接特别说明cookie是加密的:“访问者的连接是加密的,掩盖了URL,cookie和其他敏感元数据。
1赞 Andrew Jay 12/1/2017
是的,这是正确的。Cookie 在传输过程中会被加密,但一旦它们到达浏览器,它们就不会被 SSL 协议加密。开发人员可以对 cookie 数据进行加密,但这超出了 SSL 的范围。
5赞 curiousguy 7/18/2018
@DylanYoung SSL = 安全套接字层;TLS = 传输层安全性。加密是在套接字(连接)级别,或者换句话说,在传输级别,而不是存储在浏览器中每个域数据库。
1赞 DylanYoung 7/19/2018
好奇的家伙:是的,我知道。答案是它们没有被 https 加密(这意味着 ssl)。他们是。它们未在浏览器中加密。标题或任何内容(或者如果是,它们也会被简单解密)。
12赞 xxiao 11/21/2015 #7

URL 也是加密的,您实际上只有 IP、端口和 SNI(如果是 SNI)主机名,这些都是未加密的。

评论

0赞 curiousguy 7/18/2018
即使不支持 SNI,能够拦截 HTTP 连接的中介通常也能够监控 DNS 问题(大多数拦截是在客户端附近完成的,例如在盗版用户路由器上)。因此,他们将能够看到DNS名称。
24赞 keypress 2/18/2016 #8

是的,标头是加密的。它写在这里

HTTPS 消息中的所有内容都经过加密,包括标头和请求/响应负载。

评论

71赞 Aran Mulholland 10/10/2017
维基百科不是规范,这是你应该引用的。
2赞 HelpfulHelper 3/27/2022 #9

要了解哪些是加密的,哪些是未加密的,您需要知道 SSL/TLS 是传输层和应用层之间的层。

在HTTPS的情况下,HTTP是应用层,TCP是传输层。这意味着,SSL 级别以下的所有标头都是未加密的。此外,SSL 本身可能会暴露数据。公开的数据包括(对于每个图层的 Header):

注意:其他数据也可能被公开,但这些数据肯定会被公开。

苹果:

  1. 源MAC地址(当前跳)
  2. 目标MAC地址(下一跳)

IP(假设 IPv4):

  1. 目标 IP 地址
  2. 源 IP 地址
  3. IP 选项(如果设置)
  4. 服务类型(TOS)
  5. 如果 TTL 设置为 64,则当前数据包传递的跃点数

TCP协议:

  1. 源端口
  2. 目标端口
  3. TCP 选项

从理论上讲,您可以加密 TCP-Headers,但这很难实现。

SSL证书:

  1. 主机名(如果正在使用 SNI)

通常,浏览器不会立即使用 HTTPS 通过 IP 连接到目标主机,还有一些早期的请求,可能会暴露以下信息(如果您的客户端不是浏览器,它的行为可能会有所不同,但 DNS 请求很常见):

DNS: 发送此请求是为了获取服务器的正确 IP 地址。它将包括主机名,其结果将包括属于服务器的所有 IP 地址。

HTTP协议: 对服务器的第一个请求。浏览器只有在指示的情况下才会使用 SSL/TLS,首先使用未加密的 HTTP。通常,这将导致重定向到 seucre 站点。但是,此处可能已经包含了一些标头:

  1. User-Agent(客户端规范)
  2. 主机(主机名)
  3. Accept-Language(用户语言)

评论

0赞 Martheen 6/2/2022
MAC地址并没有真正“公开”,只有本地路由器才能看到客户端的MAC地址(它始终能够这样做),并且目标MAC地址与最终服务器完全无关,相反,只有服务器的路由器才能看到服务器MAC地址,而源MAC地址与客户端无关。
0赞 HelpfulHelper 6/3/2022
@Martheen,源地址设置为当前跃点的 MAC 地址,目标设置为下一跃点之一。它们取决于捕获数据包的位置,并且不提供任何有用的信息。