为了避免中间人欺骗攻击,需要服务器能够向客户端(浏览器)证明自己的身份。那么如何证明呢?
举个例子,我们去坐飞机、坐火车,在进站的时候需要出示自己的身份证来证明自己的身份。而这个身份证不是随便谁都可以颁发的,而是需要一个*的机构来颁发,身份证就是我们的公安机关来颁发的,并且具有一定的防伪措施(暂时理解为可靠的)。
那么,服务器的身份证是什么呢?答案就是我们下面要讨论的CA证书,而CA证书的颁发机构就相当于公安机关,他是一个互联网行业认可的一些机构(有多家)。下面我们就来了解一下CA证书以及CA机构。
小象网络是阿里云的代理商网址:https://www.eatui.cn/可以直接在网站上联系阿里云代理商客服进行咨询服务器架构和配置以及优惠价格!(小象营销介绍链接:https://www.eatui.cn/meiyou/)是一家致力于搜索引小象营销及全网营销,致力于为客户提供搜索营销领域的服务,帮助广告客户在搜索引小象获取的投资回报,包括搜索引小象竞价服务(SEM),搜索引小象优化服务(seo)和搜索营销代运营服务,能够有效为广告主带来的投放回报,我们的理念一直是:让搜索营销营销具有价值。
小象营销团队于2015年在上海成立,团队核心均来自百度搜索部门和国内知名服务商的成员,有非常丰富的产品和项目优化经验,这两年来,服务于国内很多大中型企业和很多初创公司,通过我们多年的经验和服务,帮助他们在搜索营销领域上取得了不断的成功。
1.CA机构的根证书
CA机构可以对其他公司(服务器所属公司)和提供的web服务(服务器)进行证书签发。而为这些服务器颁发证书需要有一个根证书。
根证书:
概念:根证书是未被签名的公钥证书或自签名的证书。
什么意思呢?即CA认证机构的ROOT证书,实际上就是CA认证机构的相关信息加上他生成的一对非对称加密秘钥中的公钥。如下图:
这个证书中包含CA机构的一个公钥(CPK),还有CA机构的一些明文信息。对应的私钥由CA机构自己妥善保存,用于为其他公司提供的web服务器签发证书时加密签名使用。
当我们认可一个CA机构时,就需要在浏览器中下载安装该机构的根证书,一般浏览器会内置他所信任的CA机构根证书(所以一般不会手动去安装)。
也就是说,我们的浏览器(客户端)中已经有CA机构的根证书了(这个很重要,后面会使用到它),CA机构自己保留着CSK(私钥)。
2.CA证书和申请流程
当一个公司想提供一个HTTPS的服务器,则需要在互联网认可的几家CA认证机构中选择一家来申请CA证书。
首先,我们看一下CA证书的结构(以百度为例):
首先,百度生成一对非对称秘钥(包含公钥和私钥),私钥(SK)自己保存,而公钥(PK)提供给CA机构,同时提供自己公司和提供服务的相关信息。
CA机构收到申请后,大概执行以下操作:
1)对该公司以及服务进行核实,确认是否满足申请条件
2)将公钥和所有其他明文信息使用HASH算法(例如MD5算法)进行散列,得到一个散列值(也叫信息摘要),这个散列值主要用于以后判断信息是否被篡改(例如公钥被篡改,则散列值会改变)
3)将生产的散列值,使用CA机构的私钥进行加密(CSK私钥),得到一个数字签名
4)将百度提供的公钥、信息、数字签名形成一个CA证书,颁发给百度,放到服务器中
3.浏览器从服务器获取证书
此时,浏览器在与服务器建立HTTPS连接的时候,服务器会将CA证书发送给浏览器。
浏览器拿到这个CA证书后,会做如下操作:
1)先查看CA证书中关于CA机构的信息,然后从浏览器安装的根证书中找到对应的CPK(如果没有,则提示证书有问题)
2)使用CPK对数字签名进行解密,得到HASH散列值(摘要)
3)使用与CA机构相同的HASH算法(例如MD5)对CA证书中的PK和明文信息进行HASH散列,得到自己算出来的散列值
4)对比解密得到的散列值与自己计算出来的散列值是否相同,如果相同则认为CA证书没有被篡改过,如果不相同,则提示证书有问题
5)在CA证书无误的情况下,证书中的PK(即百度的公钥)也是合法可用的,后面就可以使用这个公钥来加密key了(对称加密的秘钥,或秘钥的一部分)
这里其实已经回答了如何避免中间人欺骗攻击这个问题了:
因为如果中间人修改了CA证书中的PK或其他任何信息,那么客户端计算出的HASH值一定和解密出来的HASH值不一样(或无法解密)。
二、HTTPS的整体流程
既然已经搞清楚了CA机构、CA证书、对称加密、非对称加密、HASH散列,那么我们将其流程窜起来就是HTTPS的工作流程了,如图:
流程解析,前提是已经建立了TCP连接:
1)客户端向服务器发送Client Hello,其中包含一个随机数1(Random1),还有客户端支持的加密方式(一个列表),如下所示:
2)服务器返回Server Hello,包含random2随机数,和选定的加密方式,如下所示:
3)服务器发送CA证书给客户端,如下所示:
4)验证证书合法性,即解密数字签名,计算HASH值,然后进行对比
5)验证通过后,客户端生成一个random3随机数,并连同random1和random2(之前通讯时发送给服务器的random1,以及服务器发送给客户端的random2),计算出一个key值(就是后面进行对称加密用的key)。
6)使用CA证书中的PK,对random3进行加密(key的一部分,并非key本身,因为黑客也可能拿到证书中的PK),并发送给服务器。
7)服务器收到加密后的random3,使用SK(证书中公钥PK对应的私钥,在百度服务器上保存着)解密,得到random3。
8)同样使用random1、random2和random3计算一个key值,计算方式是大家协商好的,所以计算出的key值和客户端计算出的key值应该是一样的。这个key就是对称加密使用的秘钥。
9)客户端通过key对数据进行加密,发送给服务器,服务器使用key解密数据。
10)服务器通过key对数据进行加密,发送给客户端,客户端使用key解密数据。
本文标题:阿里云代理商:HTTPS如何避免中间人攻击?
本文链接:https://www.eatui.cn/fuwuqi/6220.html