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

有多少HTTPS头是加密的?

包括GET/POST请求url, cookie等。


所有HTTP头都是加密的†。 这就是为什么vhosts上的SSL工作得不太好——你需要一个专用的IP地址,因为Host头是加密的。

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

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

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

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

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

HTTP版本1.1增加了一个特殊的HTTP方法CONNECT——用于创建SSL隧道,包括必要的协议握手和加密设置。 之后的常规请求都包裹在SSL隧道中发送,包括头部和主体。

老问题的新答案,抱歉。我想我应该加上2美分

OP询问头是否被加密。

它们是:在运输中。

如果不是在运输途中,它们就不是。

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

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

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

所以如果数据在移动,它通常是受保护的。如果不在运输途中,就没有加密。

不是挑刺,但数据在最后也被解密,并可以随意解析,读取,保存,转发或丢弃。而且,任何一端的恶意软件都可以对进入(或退出)SSL协议的数据进行快照——例如(坏的)Javascript在HTTPS的页面中可以秘密地对日志网站进行http(或HTTPS)调用(因为访问本地硬盘通常是受限的,而且没有用)。

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

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

所以如果你担心数据包嗅探,你可能没事。但如果你担心恶意软件或有人窥探你的历史记录、书签、cookie或缓存,那你还没有脱离险境。

URL也是加密的,你只有IP,端口和SNI,主机名是未加密的。

是的,头文件是加密的。写在这里。

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

要理解什么是加密的,什么是不加密的,您需要知道SSL/TLS是传输层和应用层之间的一层。

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

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

MAC:

源MAC地址(当前跳) 目的MAC地址(下一跳)

IP(假设IPv4):

目的IP地址 源IP地址 IP选项(如果设置) 类型的服务(TOS) 如果TTL设置为64,则当前数据包通过的跳数

TCP:

源端口 目的港 tcp选项

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

SSL:

主机名(如果使用SNI)

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

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

HTTP: 对服务器的第一个请求。浏览器只会在有指示的情况下使用SSL/TLS,先使用未加密的HTTP。通常,这将导致重定向到安全站点。然而,有些头文件可能已经包含在这里了:

用户-代理(客户端的规范) 主机(主机名) 接收语言(用户的语言)