Fork me on GitHub
秋染蒹葭

http协议详解之二:https连接前的几毫秒发生了什么

https的出现是为了抵抗MITM(Man In The Middle Attack)中间人攻击出现的,什么是https,什么是证书,自己可以制作证书吗,如何证书就能保证安全,https会带来什么好处,有什么缺点,它的未来是一片光明的吗?

MITM Attact

何为中间人攻击

在用户连接服务器的时候,看似直接和服务器进行数据正常交换,但是这些数据实际都经历了一个中间人,这个中间人可以偷窥甚至篡改你的数据再发给你,同样也可以将数据修改完了发服务器,这些都发生在不知道的情况下。试想一下,你连接了咖啡店的公共wifi,公共wifi的路由器已经被人劫持,一旦dns已经被篡改,那你的联网基本已经被人控制了,侵入者可以看TA想看的信息,也可以让你看TA想让你看的信息。所以公共wifi有风险,连接要谨慎。

中间人攻击的方式

常见的攻击方式有两种:

域名污染

DNS解析过程与原理
说到域名污染,就不得不简单说一下DNS(Domain Name System)的原理。ip地址是用于广域网传输的,各种软件需要依靠ip地址才能进行数据传输。但是由于ip是一段无序的数字,很难记忆,比如我们可以记住并访问”www.baidu.com”,但是让我们记住百度的ip还是有困难的。这就是DNS的由来。我们上网的时候在地址栏输入域名,电脑会利用DNS将域名翻译为ip地址,这个过程称为:域名解析/DNS解析

在配置电脑网卡的时候,除了配置ip、掩码等还有一项配置DNS服务器,这个就是为你的电脑设置域名解析的。简单的解析过程如下:

  • 根据输入网址,提取域名
  • 检查HOSTS文件,确定你是否配置过,若有就直接使用配置的ip,解析结束
  • 若HOSTS中没有,pc就会看你是否设置了DNS解析服务器,如没有,浏览器就报错,回复域名无法解析,结束
  • 若你正常设置过,pc就向该服务器发一下域名查询,等待回应
  • 若无回应(服务器错了或者被拦截了),浏览器报错无法解析
  • 若有回复,pc就根据域名服务器的应答,得到域名的ip,之后浏览器就会向这个ip对应的web端口发送请求

域名劫持
域名劫持就是域名服务器上的某条记录被人修改,得到了错误的域名解析结果。有时候我们在有些网页上看到一些奇怪的小广告就有可能是被电信运营商( ISP)或者入侵者劫持了。

域名劫持的根源就是域名服务器上的记录被修改,解决这个问题的方式当然就是使用靠谱的域名服务器,比如google提供的两个: 8.8.8.8 和 8.8.4.4。

域名污染
与域名劫持略有不同,域名污染拿到的假的域名是在传输中被修改的。域名污染发生在你和域名服务器中间,只要入侵者处于这个位置就可以发起域名污染,入侵者、ISP都可以进行,当然最著名的就是GFW了。域名污染分直接污染和间接污染(污染的pc还是dns解析服务器),当然普通的入侵者只能做到直接污染。

关于DNS详细的分解可以参看《http协议详解:关于DNS》

ARP欺骗

ARP协议工作过程
局域网的传输使用的是物理地址,路由器只有在知道连接它的设备的物理地址的条件下才有可能把数据包发你。地址解析协议(Address Resolution Protocol,ARP),是在仅仅知道主机的ip时来确定其物理地址的一种协议。在一个局域网的A需要给B发IP数据报。

  • A先在其ARP高速缓存中查询有无B的ip,若有将根据ip查到的硬件地址写入MAC帧并通过局域网发送到该硬件地址
  • 若无B的IP,A的ARP进程在本局域网上广播发送一个ARP请求分组,主要内容是A自己的IP地址、MAC地址,询问的IP地址(也就是B的IP地址)。
  • 在本局域网上的所有主机运行的ARP进程都收到此ARP请求分组。
  • 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向A单播发送ARP响应分组(其中写入了B自己的硬件地址),同时将A的地址映射写入自己的ARP高速缓存中。由于其余的所有主机IP地址都与ARP请求分组要查询的IP地址不一致,因此都不理睬这个ARP请求分组。
  • A收到B的ARP响应分组后,就在其ARP高速缓存中写入B的IP地址到硬件地址的映射。
  • 如果此时另外有一个主机C,如果C控制自己的ARP响应晚于B的ARP响应到达A,就会造成A的ARP高速缓存中B的ip对应C的硬件地址

这种情况下可以截取Internet与这个目标主机的之间的全部通信,则会导致信息泄露,在主机看来访问外部服务的响应变慢

https连接

cert is OK,This is the client side of SSL connection. Now check the name field in the cert against the desired hostname.NB:this is our only defense against Man-In-The-Middle(MITM) attacks!

https是应对中间人攻击的唯一方式。

客户端问候(Client Hello)

在client hello中,将一些信息发送到服务器

  • 使用的TLS版本,TLS有三个版本,1.0,1.1,1.2,1.2是最新的版本
  • 客户端当前的时间和一个随机密码串
  • sessionId,会话ID,第一次连接时为0,如果有sessionId,则可以恢复会话,而不用重复握手过程
  • 浏览器支持的加密组合方式,加密套件的种类。
  • 还有一个是域名,域名是工作在应用层http里的,而握手是发生在TLS还在传输层。在传输层里面就把域名信息告诉服务器,好让服务根据域名发送相应的证书。

Server Hello

服务器收到了Client Hello的信息后,就给浏览器发送了一个Server Hello的包,这个包里面有着跟Client Hello类似的消息:

  • 时间、随机数等,注意服务器还发送了一个Session Id给浏览器
  • 服务器选中的加密方式

参考资料
扫盲 DNS 原理,以及“域名劫持”和“域名欺骗/域名污染”
如何进行一次完整的 SSLStrip 攻击

本文标题:http协议详解之二:https连接前的几毫秒发生了什么

文章作者:zhyjor

发布时间:2018年02月06日 - 23:02

最后更新:2023年10月11日 - 02:10

原始链接:https://zhyjor.github.io/2018/02/06/http协议详解之二:https连接前的几毫秒发生了什么/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

🐶 您的支持将鼓励我继续创作 🐶

热评文章