【发布时间】:2011-05-07 18:58:27
【问题描述】:
【问题讨论】:
【问题讨论】:
整个请求都被加密了,包括 URL,甚至是命令 (GET)。代理服务器等介入方唯一可以收集的信息是目标地址和端口。
但是请注意,TLS 握手的 Client Hello 数据包可以通过 SNI extension(感谢 @hafichuk)以纯文本形式公布完全限定域名,所有现代主流浏览器都使用该域名,尽管有些仅在较新的浏览器上使用操作系统。
编辑:(因为这只是给我一个“好答案”徽章,我想我应该回答整个问题......)
整个响应也是加密的;代理不能拦截它的任何部分。
Google 通过 https 提供搜索和其他内容,因为并非所有内容都是公开的,而且您可能还希望对 MITM 隐藏一些公开内容。无论如何,最好让谷歌answer for themselves。
【讨论】:
GET 命令)已加密。这在RFC 4366 中有介绍
在传输请求之前,连接会被加密。所以是的,请求也被加密了,包括查询字符串。
【讨论】:
一切都是加密的,但是您需要记住,您的查询将保留在服务器的日志中,并且可以被各种日志分析器等访问(这通常不是 POST 请求的情况)。
【讨论】:
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 证书是有问题的,所请求的主机名在解密之前是未知的。
【讨论】:
HTTP/1.1 位于第一行的末尾。
是的,它是安全的。 SSL 加密一切。
POST 请求的摘录:
POST /foo HTTP/1.1
... some other headers
GET 请求摘录:
GET /foo?a=b HTTP/1.1
... some other headers
在这两种情况下,在套接字上发送的任何内容都是加密的。客户端在 GET 请求期间在其浏览器中看到参数这一事实并不意味着中间人会看到相同的参数。
【讨论】:
HTTPS 在任何 HTTP 数据传输之前建立底层 SSL 连接 转移。这可确保所有 URL 数据(除了 主机名,用于建立连接)单独携带 在这个加密的连接中,并受到保护 中间人攻击的方式与任何 HTTPS 数据相同。
以上内容来自 Google Answers 的非常全面的答案,位于此处:
http://answers.google.com/answers/threadview/id/758002.html#answer
【讨论】:
使用 HTTPS 时 GET 请求被加密 - 实际上这就是安全网站需要具有唯一 IP 地址的原因 - 在解密之前无法从请求中获取预期的主机名(或虚拟目录)。
【讨论】:
URL 本身是加密的,因此查询字符串中的参数不会直接通过网络传输。
但是,请记住,包含 GET 数据的 URL 通常由网络服务器记录,而 POST 数据很少记录。因此,如果您打算做类似/login/?username=john&password=doe 的事情,那么不要;请改用 POST。
【讨论】:
安全发送主机名之后的 URL 部分。
例如, https://somewhere.com/index.php?NAME=FIELD
/index.php?NAME=FIELD 部分已加密。 somewhere.com 不是。
【讨论】:
我刚刚通过 HTTPS 连接到一个网站并传递了一堆 GET 参数。然后我用wireshark嗅探网络。使用 HTTP,发送的 URL 是未加密的,这意味着我可以很容易地看到 URL 中的所有 GET 参数。使用 HTTPS,一切都被加密了,我什至看不到哪个数据包是 GET 命令,更不用说它的内容了!
【讨论】:
上面有点混乱:
所以,回答原来的问题。除了主机名(我猜是端口)之外的所有内容都在两个方向上都是安全的。
【讨论】: