GET数据也是用HTTPSencryption的吗?
当你拿到时
https://encrypted.google.com/search?q=%s
%s
查询已encryption? 或者只是回应? 如果不是的话,那么Google为什么还要使用encryptionfunction来公开内容呢?
整个请求被encryption,包括URL,甚至命令( GET
)。 代理服务器等干预方只能收集目的地址和端口。
但是,请注意,TLS握手的客户端Hello数据包可以通过SNI扩展 (谢谢@hafichuk)以明文forms公布完全限定的域名,所有现代主stream浏览器都使用该扩展 (谢谢@hafichuk),尽pipe只有更新的操作系统才使用。
编辑:(因为这只是给我一个“好答案”的徽章,我想我应该回答整个问题…)
整个响应也被encryption; 代理不能拦截任何部分。
Google通过https提供search和其他内容,因为并非所有内容都是公开的,您可能还想隐藏MITM的一些公开内容。 无论如何,最好让Google 自己回答 。
该URL本身是encryption的,所以查询string中的参数不会穿过线路。
但是,请记住,包含GET数据的URL通常由Web服务器logging,而POST数据很less。 所以如果你打算做一些像/login/?username=john&password=doe
,那么不要; 改用POST。
HTTPS在传输任何HTTP数据之前build立底层SSL连接。 这确保了所有的URL数据(除用于build立连接的主机名外)仅在该encryption连接中进行,并且以任何HTTPS数据相同的方式被保护以免受中间人攻击。
以上是来自Google答案的非常全面的答案的一部分:
http://answers.google.com/answers/threadview/id/758002.html#answer
主机名后面的URL部分是安全发送的。
例如, https://somewhere.com/index.php?NAME=FIELD
/index.php?NAME=FIELD
部分已encryption。 somewhere.com
不是。
一切都是encryption的,但你需要记住,你的查询将留在服务器的日志,并可以访问各种日志分析器等(这通常不是与POST请求的情况下)。
请求传输之前,连接被encryption。 所以是的,请求也被encryption,包括查询string。
SSL在标题parsing之前发生,这意味着:
Client creates Request Request gets encrypted Encrypted request gets transmitted to the Server Server decrypts the Request Request gets parsed
请求看起来像这样(不记得确切的语法,但这应该足够接近):
GET /search?q=qwerty HTTP/1.1 Host: www.google.de
这也是为什么具有相同IP上的多个主机的不同SSL证书是有问题的,所请求的主机名在解密之前是未知的。
是的,这是安全的。 SSLencryption一切。
摘自POST请求:
POST /foo HTTP/1.1 ... some other headers
摘自GET请求:
GET /foo?a=b HTTP/1.1 ... some other headers
在这两种情况下,无论在套接字上发送什么都被encryption。 客户端在GET请求期间看到浏览器中的参数并不意味着中间的人会看到相同的事实。
我只是通过HTTPS连接到一个网站,并传递了一堆GET参数。 然后,我用wireshark来嗅探networking。 使用HTTP,URL是未encryption的,这意味着我可以很容易地看到URL中的所有GET参数。 使用HTTPS,一切都被encryption,我什至不能看到哪个数据包是GET命令,更不用说它的内容!
我会说这将取决于谁有权访问日志,或者从日志中生成统计信息。 显然,传输层是安全的,但是如果你在GET请求中input数据,除了站点pipe理员和用户自己都不应该读取数据,我只需要使用POST。 我可以想象,有很多蹩脚的托pipe服务提供商谁不真正安全访问日志。
GET请求在使用HTTPS时被encryption – 实际上这就是为什么安全网站需要有一个唯一的IP地址 – 没有办法从请求中获得想要的主机名(或虚拟目录),直到解密完成。