https连接的前几毫秒发生了什么

本文详细探讨了HTTPS如何防止中间人攻击,解释了HTTPS连接的全过程,包括Client Hello、Server Hello、证书验证、密钥交换等步骤,揭示了证书、公钥和私钥在保证安全中的作用。此外,还讨论了使用HTTPS的代价,如时间成本、CPU资源消耗和带宽占用,并介绍了如何创建自签名证书。
摘要由CSDN通过智能技术生成

在讨论这个话题之前,先提几个问题:

  1. 为什么说https是安全的,安全在哪里?
  2. https是使用了证书保证它的安全的么?
  3. 为什么证书需要购买?

我们先来看https要解决什么问题

(手机读者推荐移步http://yincheng.site/https)

一、 https解决什么问题

https要解决的问题就是中间人攻击,什么是中间人攻击(Man In The Middle Attack)呢?如下图所示:

你和服务器的连接会经过一个中间人,你以为你和服务器在正常地传输入数据,其实这些数据都先经过了一个中间人,这个中间人可以窥探你的数据或者篡改你的数据后再发给服务器,相反也可以把服务器的数据修改了之后再发给你。而这个中间人对你是透明的,你不知道你的数据已经被人窃取或者修改了。

二、 中间人攻击的方式

常见的有以下两种:

1)域名污染

由于我们访问一个域名时需要先进行域名解析,即向DNS服务器请求某个域名的IP地址。例如taobao.com我这边解析的IP地址为:

在经过DNS的中间链点可能会抢答,返回给你一个错误的IP地址,这个IP地址就指向中间人的机器。

2)APR欺骗

广域网的传输是用的IP地址,而在局域网里面是用的物理地址,例如路由器需要知道连接它的设备的物理地址它才可以把数据包发给你,它会通过一个ARP的广播,向所有设备查询某个IP地址的物理地址是多少,如下所示:

路由器发了一个广播,询问192.168.1.100的物理地址是多少,由于没有人响应,所以它每隔1秒就重新发了个包。由于这个网络上的所有机器都会收到这个包,所以这个时候就可以欺骗路由器:

上面的192.168.1.102就向路由器发了一个响应的包,告诉路由器它的物理地址。

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

在ssl的源码里面就有一段注释:

最后一句的意思就是说使用https,是应对中间人攻击的唯一方式。为什么这么说呢,这得从https连接的过程说起。

四、https连接的过程

如果对于一个外行人,可以这么解释:

https连接,服务器发送它的证书给浏览器(客户端),浏览器确认证书正确,并检查证书中对应的主机名是否正确,如果正确则双方加密数据后发给对方,对方再进行解密,保证数据是不透明的

但是如果这个外行人比较聪明,他可能会问你浏览器是怎么检验证书正确的,证书又是什么东西,加密后不会被中间人破解么?

首先证书是个什么东西,可以在浏览器上面看到证书的内容,例如我们访问谷歌,然后点击地址栏的小锁:

再点击详情->查看证书,就可以看到整个证书的完整内容:
证书的内容

接下来再用一个WireShark的抓包工具,抓取整个https连接的包,并分析这些包的内容。

下面以访问淘宝为例,打开淘宝,可以在Chrome里面看到淘宝的IP
域名IP

然后打开WireShark,设定过滤条件为源IP和目的IP都为上面的IP,就可以观察到整一个连接建立的过程:

第一步是肯定是要先建立TCP连接,这里就不说了,我们从Client Hello开始说起:

1. Client Hello

我们在wireshark里面观察,将client hello里面客户端发给服务器的一些重要信息罗列出来

(1)使用的TLS版本是1.2,TLS有三个版本,1.0,1.1,1.2,1.2是最新的版本,https的加密就是靠的TLS安全传输层协议:
使用的TLS版本

(2)客户端当前的时间和一个随机密码串,这个时间是距Unix元年(1970.1.1)的秒数,这里是147895117,随机数的作用下面再提及。

(3)sessionId,会话ID,第一次连接时为0,如果有sessionId,则可以恢复会话,而不用重复握手过程:

(4)浏览器支持的加密组合方式:可以看到,浏览器一共支持22种加密组合方式,发给服务器,让服务器选一个。具体的加密方式下文再介绍

(5)还有一个比较有趣的东西是域名:

为什么说这个比较特别呢,因为域名是工作在应用层http里的,而握手是发生在TLS还在传输层。在传输层里面就把域名信息告

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值