HTTPS / TLS连接初始化

时间:2015-11-10 21:01:21

标签: http https dns wireshark tls1.2

我一直在玩Wireshark,我注意到在初始化https连接时某些网站的行为有所不同。我正在测试的第一个网站是美国银行(Bank of America),当我将“bankofamerica.com”输入我的地址栏时,它的表现完全符合我的预期。

控制流程如下:

  1. 发送DNS请求
  2. 通过端口80(TCP握手)设置TCP连接
  3. 发送GET / HTTP / 1.1
  4. 接收301永久移动到https://www.bankofamerica.com
  5. 设置443以上的TCP连接
  6. 设置TLS并发送数据
  7. 这正是我期望发生的事情。但是,当我将“facebook.com”输入我的地址栏时,发生了以下情况:

    1. 发送DNS请求
    2. 通过端口443设置TCP连接
    3. 设置TLS并发送数据
    4. 即使我没有在地址栏中指定HTTPS,连接如何能够跳过HTTP请求?我已经尝试清除我的浏览器缓存,重置我的路由器,甚至查看DNS RFC以查看是否有一些“仅https”标志(正如我预期的那样,没有)。

      当我使用netcat时,我能够永久性地生成301 Moved(但不是http://www。不是https://www。)

      nc facebook.com 80\n
      GET / HTTP/1.0\n\n
      

      但我不知道(即使在删除我的缓存后)它是如何在浏览器连接中跳过http部分的。我担心我不了解http / https如何工作的基本部分。任何帮助将不胜感激。

      由于

1 个答案:

答案 0 :(得分:1)

最可能的原因是您在过去的某个时间使用该浏览器访问过Facebook并且Facebook服务器返回了HTTP严格传输安全性(HSTS)标头。

一旦网站返回了设置为Strict-Transport-Security的回复,即使您在浏览器中使用http://前缀,浏览器也会始终直接进入HTTPS。我在自己的私人网站上尝试使用HSTS时发现了这一点,并发现在设置HSTS设置后很难找到一些浏览器(Firefox我看着你)。