答案 0 :(得分:129)
整个请求都是加密的,包括URL,甚至命令(GET
)。代理服务器等中介方唯一可以收集的是目标地址和端口。
但请注意,TLS握手的客户端Hello数据包可以通过SNI extension(感谢@hafichuk)以明文形式通告完全限定的域名,这是所有现代主流浏览器都使用的,尽管只有一些在较新的操作系统上。
编辑:(因为这只是给我一个“好答案”徽章,我想我应该回答整个问题......)
整个回复也是加密的;代理人不能拦截它的任何部分。
Google通过https提供搜索和其他内容,因为并非所有内容都是公开的,您可能还想隐藏MITM中的部分公开内容。无论如何,最好让Google answer for themselves。
答案 1 :(得分:56)
URL本身已加密,因此查询字符串中的参数不会通过网络传输。
但是,请记住,包含GET数据的URL通常由Web服务器记录,而POST数据很少。所以如果你打算做/login/?username=john&password=doe
这样的事情,那就不要;改为使用POST。
答案 2 :(得分:20)
HTTPS在任何HTTP数据之前建立基础SSL连接 转移。这确保了所有URL数据(除了 hostname,用于建立连接)是单独携带的 在此加密连接中并受到保护 中间人攻击的方式与任何HTTPS数据相同。
以上是Google Answers的非常全面的答案的一部分:
http://answers.google.com/answers/threadview/id/758002.html#answer
答案 3 :(得分:13)
主机名安全发送后的URL部分。
例如, https://somewhere.com/index.php?NAME=FIELD
/index.php?NAME=FIELD
部分已加密。 somewhere.com
不是。
答案 4 :(得分:5)
所有内容都是加密的,但您需要记住,您的查询将保留在服务器的日志中,并且可供各种日志分析程序等访问(通常情况下,POST请求不是这种情况)。
答案 5 :(得分:4)
在传输请求之前,连接已加密。所以是的,请求也是加密的,包括查询字符串。
答案 6 :(得分:3)
SSL在头解析之前发生,这意味着:
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证书是有问题的,在解密之前不知道请求的主机名。
答案 7 :(得分:3)
是的,这是安全的。 SSL加密所有内容。
摘自POST请求:
POST /foo HTTP/1.1
... some other headers
摘自GET请求:
GET /foo?a=b HTTP/1.1
... some other headers
在这两种情况下,套接字上发送的内容都是加密的。客户端在GET请求期间在浏览器中看到参数这一事实并不意味着中间人会看到相同的内容。
答案 8 :(得分:3)
我刚刚通过HTTPS连接到一个网站并传递了一堆GET参数。然后我用wireshark来嗅探网络。使用HTTP,URL以未加密的方式发送,这意味着我可以轻松查看URL中的所有GET参数。使用HTTPS,一切都是加密的,我甚至看不到哪个数据包是GET命令,更不用说它的内容了!
答案 9 :(得分:0)
使用HTTPS时GET请求是加密的 - 事实上这就是安全网站需要拥有唯一IP地址的原因 - 在请求被解密之前,无法从请求中获取预期的主机名(或虚拟目录)。 / p>