HTTPS标头是否已加密?


598

通过HTTPS发送数据时,我知道内容是加密的,但是我听到有关标头是加密的还是标头加密了多少的混合答案。

多少个HTTPS标头加密?

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


9
HTTPS上的HTTP标头是加密的,并且也不是HTTP压缩的(即使主体是HTTP压缩的)。这使它们不易受到像BEAST压缩相关的攻击
尼尔·麦圭根

Answers:


551

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

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


3
@Greg,由于vhost网关已获得授权,因此网关无法解密它们,观察Host标头,然后确定将数据包发送到哪个主机?
Pacerier 2014年

2
Afaik URL本身未加密。
泰迪

4
@Teddu您的意思是“ URL本身未加密”。它是加密的,因为它是标头的一部分。
德米特里·普卢什金

1
如果Fiddler用于捕获https通信,它仍显示一些标题,为什么?特别是,当互联网连接通过需要身份验证的代理时,当请求在第一次发送后得到407重新发送时,它将显示Proxy-Authorization标头。
Bochen Lin '18

1
@Bochen飞马座也一样。如果您位于HTTPS隧道的任一端,则可以看到所有内容。同样,我可以在浏览器devtools中看到任何内容。
Nux

97

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


4
并非所有SSL设置都涉及DH
Dori

30
有点古怪:客户端和服务器的IP地址,服务器的主机名以及有关其SSL实现的信号对于窃听者是有用的,并且是可见的。
poolie

66

对旧问题的新答案,很抱歉。我以为我要加$ .02

OP询问标头是否已加密。

它们是:运输中。

他们不是:不在途中。

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

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

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

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

不要随意选择,但是最后的数据也会解密,可以随意解析,读取,保存,转发或丢弃。而且,两端的恶意软件都可以对进入(或退出)SSL协议的数据进行快照-例如HTTPS内页面内的(不良)Javascript,可以秘密地对登录的网站进行http(或https)调用(因为访问本地硬盘驱动器)通常受到限制,没有用)。

同样,cookie也不使用HTTPS协议加密。希望将敏感数据存储在cookie中(或其他任何原因)的开发人员需要使用自己的加密机制。

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

因此,如果您担心数据包嗅探,那可能还可以。但是,如果您担心恶意软件或有人在浏览您的历史记录,书签,Cookie或缓存,那您还不算麻烦。


20
我知道好的答案是最重要的,但这又会插入错误的信息。除非使用SNI,否则域是可见的。IP和TCP以外的协议均不可见。您无法确定我使用的是HTTP 1.1,SPDY还是HTTP2。在两个端点上可见的内容是无关紧要的,因为加密的目的不是使事物不可见,而是使事物仅对可信方可见。因此,该问题暗示了端点,可以删除答案的大约2/3。代理信息应为:如果您使用HTTPS代理,则它确实有权访问所有内容
梅尔文

6
您的链接专门说Cookie是经过加密的:“访问者的连接已加密,使URL,Cookie和其他敏感的元数据变得模糊。”
DylanYoung

1
对,那是正确的。Cookies在传输过程中被加密,但是一旦它们到达浏览器,它们就不会被SSL协议加密。开发人员可以对Cookie数据进行加密,但这超出了SSL的范围。
安德鲁·詹宁斯

4
@DylanYoung SSL =安全套接字层;TLS = 传输层安全性。加密是在套接字(连接)级别,或者换种说法在传输级别,而不是存储在每个域数据库的浏览器中。
curiousguy18年

@Wigwam安全敏感的HTTP cookie几乎始终是对身份验证会话的服务器数据库中的记录的不透明引用(通常是加密强随机数)。这样,对该无意义的标识符进行加密将主要带来额外的复杂性。
curiousguy18年


47

使用SSL时,加密处于传输级别,因此它发生在发送请求之前。

因此,请求中的所有内容均已加密。


由于SSL在传输层进行,而目的地址在数据包中(在报头中)的分配发生在网络层(在transport之下),那么如何对报头进行加密?
Prateek Joshi

@PrateekJoshi因为HTTP头位于应用程序层上,所以默认情况下HTTP头是加密的,因为较低/祖先层被加密了。
Aquarelle

40

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


21

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

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


37
维基百科不是规范,这是您应该引用的规范。
阿兰·穆赫兰

8

URL也已加密,您实际上只有IP,端口以及SNI(未加密的主机名)。


即使不支持SNI,能够拦截HTTP连接的中介通常也能够监视DNS问题(大多数拦截是在客户端附近完成的,例如在盗版用户路由器上)。这样他们将能够看到DNS名称。
curiousguy18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.