URL如何转换为TCP / IP请求?

时间:2014-09-12 15:32:56

标签: ssl tcp https ip tcp-ip

最近,一位同事告诉我,第三方可以看到HTTPS GET请求的查询字符串,我开始证明他是错的。但是找到任何关于URL解析的明确描述都很困难。

我的理解是URL只是零碎地发送,域传递到IP头,端口传递到TCP头等等。在HTTPS GET的特定情况下,这将意味着查询字符串将只驻留在HTTP标头中,而HTTP标头又位于TLS主体中,该主体是端到端加密的,因此是安全的。

我的问题是双重的:

  • 首先,我对HTTPS GET查询字符串的具体情况是否正确?
  • 其次,任何人都可以向我提供URL的一般解剖,并着眼于其部分如何转换为TCP / IP请求吗?

2 个答案:

答案 0 :(得分:3)

首先,使用HTTPS时,在传输过程中受保护的查询字符串是正确的。关于此问题已经有很多问题,例如this one。本质上,HTTPS是基于SSL / TLS的HTTP,因此在发送任何HTTPS流量之前设置SSL / TLS连接。 (在TLS的服务器名称指示扩展中,主机名可能是可见的,或者无论如何都可以通过DNS请求泄露。)

其次,当您向https://host.example:port/something?blabla=1发出GET请求时,这是对所发生情况的概述:

  • 您的浏览器与该端口上的host.example建立TCP连接。
  • 由于它是https://网址,因此建立了SSL / TLS连接。 SSL / TLS堆栈应验证证书,并且它与您之后的主机名相匹配。
  • 在此SSL / TLS连接之上(使用普通HTTP时,它将直接位于TCP连接之上),您的浏览器会发送如下内容:

    GET /something?blabla=1 HTTP/1.1
    Host: host.example:port
    .... (other headers)
    

    所有这些都是通过SSL / TLS发送的。请注意,严格来说,查询参数是网址的组成部分,并会发送in the Request-Line, not headers

您可以在RFC 2616(最近取代)和RFC 2818中的HTTPS中找到有关HTTP的详细信息。

答案 1 :(得分:-1)

IP标头不会使用URL或域或类似的东西,但它们封装的TCP会。在这种情况下,封装的所有内容都是加密的。

我认为值得指出的是,虽然您可能看不到给定的HTTPS消息,但消息如

GET https://example.com/query?q=text

我相信您会看到针对'示例'的DNS请求在明确;其他所有内容都将在HTTPS中加密。所有这些都表示在主机解析步骤中不要忘记加密。它不在IP标头中,而是IP地址的用途。但我们可以通过DNS获取这些地址。