一、HTTPS如何避免中间人攻击为了避免中间人欺骗攻击,需要服务器能够向客户端(浏览器)证明自己的身份。那么如何证明呢?举个例子,我们去坐飞机、坐火车,在进站的时候需要出示自己的身份证来证明自己的身 一、HTTPS如何避免中间人攻击
为了避免中间人欺骗攻击,需要能够向客户端(浏览器)证明自己的身份。那么如何证明呢?
举个例子,我们去坐飞机、坐火车,在进站的时候需要出示自己的身份证来证明自己的身份。而这个身份证不是随便谁都可以颁发的,而是需要一个权威的机构来颁发,身份证就是我们国家的公安机关来颁发的,并且具有一定的防伪措施(暂时理解为绝对可靠的)。
那么,服务器的身份证是什么呢?答案就是我们下面要讨论的CA证书,而CA证书的颁发机构就相当于公安机关,他是一个互联网行业认可的一些机构(有多家)。下面我们就来了解一下CA证书以及CA机构。
上海信息技术有限公司是的商网址:http:///可以直接在上联系客服进行咨询服务器架构和配置以及优惠价格!(介绍链接:http://www/meiyou/)是一家致力于引营销及,致力于为客户提供搜索营销领域的服务,帮助客户在搜索引获取的投资回报,包括搜索引服务(),搜索引服务()和搜索营销代运营服务,能够有效为广告主带来高效的投放回报,我们的理念一直是:让搜索营销营销具有价值。
营销团队于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解密数据。
|