GET数据也在HTTPS中加密吗?


Answers:


145

整个请求都被加密,包括URL,甚至是命令(GET)。诸如代理服务器之类的干预方唯一可以收集的是目标地址和端口。

但是请注意,TLS握手的Client Hello数据包可以通过SNI扩展名(感谢@hafichuk)以纯文本形式发布完全合格的域名,所有现代主流浏览器都使用了SNI扩展名(尽管有些仅在较新的OS上使用)。

编辑:(因为这只是给我一个“好答案”徽章,我想我应该回答整个问题……)

整个响应也被加密;代理无法拦截其中的任何部分。

Google通过https提供搜索和其他内容,因为并非所有内容都是公开的,并且您可能还希望对MITM隐藏一些公开的内容。无论如何,最好让Google 自己回答


2
我对URL加密的说法感到有点不满意。主机名不是URL的一部分吗?如果是这样,则说明是错误的。无法像发送物理邮件时无法隐藏目标地址的方式那样,从ISP /代理服务器中隐藏主机名/ IP地址。
Abhishek Anand 2014年

1
@Abhishek:TCP / IP标头中没有主机名。我在回答中包含IP地址。
Marcelo Cantos 2014年

加密。这是为了支持基于名称的虚拟主机(基于IP)。@MarceloCantos完全正确,URL的其余部分(即GET命令)已加密。这是覆盖在4366 RFC
hafichuk

@hafichuk:谢谢。我没有意识到TLS可以宣传fqdn。上一次我尝试设置https多服务器(我承认,几年前)时,通过单个IP似乎是不可能的。
马塞洛·坎托斯

包含域名的TLS的重要补充:不要忘记还包含域名的纯文本DNS请求。有可能看到您的加密HTTPS流量的人也可以看到您的DNS请求。
Tim G'8

63

URL本身是加密的,因此查询字符串中的参数不会在整个网络中传播。

但是,请记住,包含GET数据的URL通常由网络服务器记录,而POST数据很少记录。因此,如果您打算做类似的事情/login/?username=john&password=doe,那就不要;改用POST。


2
+1谢谢。这是在我自己的物理服务器上,因此我不太担心日志,但是对于在共享托管环境中考虑此问题的任何人来说,这都是一个很好的考虑因素。考虑这一点也很重要,因为我将以这种方式转移信用卡号,并且肯定不会想要登录它们:)
orokusaki 2011年

3
没关系,这是您自己的盒子。您也不希望拥有它的其他任何人(即邪恶的黑客)也以纯文本格式查看那些密码。或那些抄送号码(假设您也没有将这些号码存储在其他地方)。
Thomas

1
您应该将它们放在POST正文中,而不是URL查询字符串中。
托马斯

1
您是否担心wbeserver在访问其日志方面的限制比在访问网站数据(数据库,文件等)时受到的限制要少?恕我直言,只要数据可以安全地访问Web服务器,一切就很好。唯一有权访问Web服务器的人应该被认为是可靠的,因为如果没有,那么您将无法阻止他们以某种方式读取数据。
Serge Profafilecebook,2015年

1
通过GET发送密码并将其记录在访问日志中时,不会对它们进行哈希处理。我认为这是最大的问题。如果仅在Web服务器的访问日志中查找密码,则在数据库中具有哈希密码并不重要。它们应该在数据库中散列,如果不是,请对其进行修复。
SteenSchütt2015年



6

一切都是加密的,但您需要记住,查询将保留在服务器的日志中,并且各种日志分析器等都可以访问(对于POST请求通常不是这种情况)。


1
哪些服务器?对谁开放?
贾德·迪亚斯

2
@Jader至少负责该服务器的管理员和黑客。使用POST请求时,信息不会保留在日志中,因此,除非进行明确记录,否则日志不会有问题。GET查询的确保留在日志中,如果日志发生了任何变化(或管理员决定将这些日志用于任何不良活动),则您会遇到麻烦。
Eugene Mayevski'Callback

4

发送请求之前,连接已加密。因此,是的,请求也已加密,包括查询字符串。


4

是的,它是安全的。SSL加密所有内容。

POST请求摘录:

POST /foo HTTP/1.1
... some other headers

摘自GET请求:

GET /foo?a=b HTTP/1.1
... some other headers

在这两种情况下,套接字上发送的所有内容都会被加密。客户端在GET请求期间看到其浏览器中的参数的事实并不意味着中间的人会看到相同的结果。


4

我只是通过HTTPS连接到网站,并传递了一堆GET参数。然后,我使用wireshark嗅探网络。使用HTTP,未加密地发送URL,这意味着我可以轻松查看URL中的所有GET参数。使用HTTPS,所有内容都被加密,我什至看不到哪个数据包是GET命令,更不用说其内容了!


3

SSL发生在头解析之前,这意味着:

Client creates Request
Request gets encrypted
Encrypted request gets transmitted to the Server
Server decrypts the Request
Request gets parsed

一个Request看起来像这样(不记得确切的语法,但这应该足够接近):

GET /search?q=qwerty HTTP/1.1
Host: www.google.de

这也是为什么同一IP上的多个主机具有不同的SSL证书会出现问题的原因,直到解密后才知道所请求的主机名。


1
HTTP/1.1谈到在第一行的末尾。
Marcelo Cantos

@Marcelos Cantos:谢谢,已经有一段时间了,因为我不得不手动编写HTTP请求。
Morfildur 2010年

0

使用HTTPS时,GET请求已加密-实际上,这就是受保护的网站需要具有唯一IP地址的原因-在解密请求之前,无法从请求中获取预期的主机名(或虚拟目录)。


JFYI:有一个TLS扩展名,可让客户端指定主机名,以便服务器可以选择相应的证书。
Eugene Mayevski'Callback

@Eugene:谢谢-我知道TLS扩展,但仅从最松散的意义上讲-我不了解细节或实际使用范围(或可能不广泛)。
Michael Burr
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.