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

有多少HTTPS头是加密的?

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


当前回答

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

其他回答

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

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

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

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

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

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

要理解什么是加密的,什么是不加密的,您需要知道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。通常,这将导致重定向到安全站点。然而,有些头文件可能已经包含在这里了:

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