【问题标题】:Are HTTPS headers encrypted?HTTPS 标头是否加密?
【发布时间】:2010-09-16 07:17:28
【问题描述】:

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

有多少 HTTPS 标头加密的?

包括 GET/POST 请求 URL、Cookie 等

【问题讨论】:

  • HTTPS 上的 HTTP 标头是加密的,也不是 HTTP 压缩的(即使正文是)。这使得它们不太容易受到 BEAST 等与压缩相关的攻击

标签: security post encryption https get


【解决方案1】:

全部加密 - 所有标题。 这就是为什么 vhost 上的 SSL 不能很好地工作的原因 - 你需要一个专用的 IP 地址,因为 Host 标头是加密的。

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

【讨论】:

  • @Greg,既然vhost网关是授权的,网关不能解密它们,观察Host头,然后确定将数据包发送到哪个主机?
  • Afaik URL 本身未加密。
  • @Teddu “URL 本身未加密”是什么意思。它是加密的,因为它是标头的一部分。
  • 如果用Fiddler抓取https通信,还是会显示一些headers,为什么?特别是,当通过需要身份验证的代理连接互联网时,在第一次发送时收到 407 后重新发送请求时,它会显示 Proxy-Authorization 标头。
  • @Bochen 和 Pegasus 一样。如果您在 HTTPS 隧道的任一端,那么您可以看到所有内容。同样的方式我可以在浏览器开发工具中看到任何东西。
【解决方案2】:

使用 SSL,加密是在传输级别,所以它发生在发送请求之前。

所以请求中的所有内容都是加密的。

【讨论】:

  • 既然 SSL 发生在传输层,而数据包中目标地址的分配(在标头中)发生在网络层(位于传输层之下),那么标头如何加密?
  • @PrateekJoshi 因为 HTTP 标头位于应用程序层,因此默认情况下,由于较低/祖先层被加密而被加密。
【解决方案3】:

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

【讨论】:

  • 并非所有 SSL 设置都涉及 DH
  • 有点迂腐:客户端和服务器的 IP 地址、服务器的主机名以及有关其 SSL 实现的信号对窃听者很有用并且是可见的。
【解决方案4】:

HTTPS(HTTP over SSL)通过 SSL 隧道发送所有 HTTP 内容,因此 HTTP 内容和标头也被加密。

【讨论】:

    【解决方案5】:

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

    【讨论】:

    【解决方案6】:

    旧问题的新答案,对不起。我想我会添加我的 $.02

    OP 询问标头是否已加密。

    它们是:在运输中。

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

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

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

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

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

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

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

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

    因此,如果您担心数据包嗅探,您可能没问题。但是,如果您担心恶意软件或有人在浏览您的历史记录、书签、cookie 或缓存,那么您还没有摆脱困境。

    【讨论】:

    • 我知道好的答案是最重要的,但这再次插入了 faulty 信息。域可见,除非使用 SNI。除了 IP 和 TCP 之外的协议是可见的。你无法判断我使用的是 HTTP 1.1、SPDY 还是 HTTP2。两个端点上可见的内容无关紧要,因为加密的目标不是使事物不可见,而是使事物仅对受信任方可见。因此,问题中隐含了端点,可以删除大约 2/3 的答案。代理信息应该是:如果您使用 HTTPS 代理,那么它确实可以访问所有内容
    • 您的链接明确指出 cookie 已加密:“访问者的连接已加密,隐藏了 URL、cookie 和其他敏感元数据。”
    • 是的,没错。 Cookie 在传输过程中被加密,但一旦到达浏览器,它们就不会被 SSL 协议加密。开发人员可以加密 cookie 数据,但这超出了 SSL 的范围。
    • @DylanYoung SSL = 安全 socket 层; TLS = 传输层安全。加密是在套接字(连接)级别,或者换一种说法是在传输级别,而不是存储在每个域数据库的浏览器中。
    • @Wigwam 安全敏感的 HTTP cookie 几乎总是对经过身份验证的会话的服务器数据库中的记录的不透明引用(通常是加密的强随机数)。因此,加密这个无意义的标识符主要会带来额外的复杂性。
    【解决方案7】:

    URL 也是加密的,你真的只有 IP、端口,如果是 SNI,还有未加密的主机名。

    【讨论】:

    • 即使不支持 SNI,能够拦截 HTTP 连接的中介通常也能够监视 DNS 问题(大多数拦截是在客户端附近完成的,例如在盗版用户路由器上)。所以他们将能够看到 DNS 名称。
    【解决方案8】:

    是的,标头已加密。写成here

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

    【讨论】:

    • 维基百科不是你应该引用的规范。
    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 2018-11-29
    • 2019-09-05
    • 2010-09-09
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    相关资源
    最近更新 更多