参考书籍:《图解HTTP》
参考博文:https://blog.csdn.net/wangtaomtk/article/details/80917081
HTTP存在的三个问题
- 由于HTTP采用明文传输,所以传输的内容可被别人窃听(采用抓包工具)
- 通信双方对对方的身份无法验证,所以可能导致我们与假的服务器通信
- 无法验证报文的完整性,也就是说服务器发给我们的报文可能被别人修改后再发给我们。
对称加密和非对称加密
- 对称加密(共享密钥加密):加密和解密使用同一个密钥。
- 非对称加密(公开密钥加密):使用公钥(任何人都可以知道)和私钥(不能让其他人知道),双方可以互解对方加密的东西。
HTTPS原理
具体来源请参考以上博文,这里直接介绍这个传输的过程
- 客户端向服务器发送ClientHello,其主要内容为客户端所支持的加密算法、SSL版本和随机数r1。
- 服务器向客户端发送ServerHello,从第一步传输的加密算法和SSL版本中选择一个作为以后通信使用,并生成随机数r2,发给客户端。
- 服务器向客户端发送自己的证书(关于证书的具体得到过程,后面再讲)。
- 服务器向客户端发送ServerHelloDone表明最初阶段的SSL握手协商部分结束。
- 此时,客户端会先对服务器的证书进行验证(验证过程后面再讲,通过证书的验证,解决了对方身份无法验证的问题),若验证不通过,则结束通信。若验证通过,会在生成一个随机数r3,此时客户端会拿到服务器的公钥,用服务器的公钥对r3加密得到PreMaster Key,并将PreMaster Key传给服务器(由于PreMaster Key只能通过服务器的私钥进行解密,故不怕黑客窃听)。服务器收到PreMaster Key后进行解密,此时双方都有了随机数r1,r2,r3,双方通过相同的算法生成一个相同的密钥。
- 客户端告诉服务器,以后通信就使用上面生成的密钥进行通信(即变成了对称加密)。
- 客户端将上述的通信内容生成摘要再用生成的密钥进行加密传给服务器,服务器使用刚刚生成的密钥进行解密,由于服务器端也有之前通信的内容,他会对比解密后的内容和本地的内容是否一致,若一致则继续通信。
- 同6。
- 同7 。
- 此时双方协商出了同一份密钥,以后的数据传输就采用这个密钥进行加密(解决明文传输的问题)。
结论:采用非对称加密传输(协商)密钥,采用对称加密传输数据。
证书
服务器会将自己的公钥即一些相关信息发给第三方机构,第三方机构再对服务器审查完成后,生成证书(包含服务器的公钥和其它信息),第三方机构再使用自己的公钥对证书加密后发给服务器。
客户端再对证书验证:客户端存有第三方机构的公钥,首先会使用公钥对证书解密(若解密不成功则说明证书无效),然后得到服务器的公钥,即确定身份。