谈谈HTTPS的加密过程


一、HTTPS是什么?

HTTPS是一个密文传输的应用层安全协议,是在HTTP协议的基础上套了一层TLS/SSL协议(安全协议)
HTTP是明文传输,存在被劫持的风险
从源主机(客户端发送请求的主机)到目的主机(服务端进程所在的主机),会经过很多网络设备
经过的网络节点(网络硬件设备):路由器,集线器,光猫,主机
这些设备都可以篡改http原始数据(请求,和响应都可能)
如何篡改:

  1. 发现请求url是a(千千动听下载链接),就直接改为b(qq浏览器的下载链接)
  2. 发现上一个页面(通过Referer就可以知道)是xxx,就可以加一些小广告

二、加密是什么?

概念:

  • 明文:可以直接看到原始数据的文本
  • 密文:加密后,看不到原始数据的文本
  • 加密:将明文通过加密手段,转换密文
  • 解密:将密文通过解密的手段,转换为明文
  • 密钥:可以基于一个密钥(一般是一个字符串),将一个数据(可以是文本,也可以是二进制数据)进行加密,使用相同的密钥就可以解密

加密和解密都是通过算法实现
加密分为 对称加密非对称加密 两种类型

三、HTTPS的工作过程

1.引入对称加密

对称加密其实就是通过同一个密钥,把明文加密成密文,也能把密文解密成明文

引入对称加密后,即使数据被黑客截获,由于黑客不知道密钥是啥,因此就无法解密,也就无法知道请求的真实内容
但是服务器同一时刻其实是给很多客户端提供服务的,每个人用的密钥都必须是不同的(如果是相同那密钥就太容易扩散了,黑客也就可以拿到了),因此服务器就需要维护每个客户端和每个密钥之间的关联关系
比较理想的做法就是能在客户端和服务端建立连接的时候,双方协商确定这次的密钥是啥
但是如果直接把密钥明文传输,那么黑客也能获得密钥了,此时后续在加密也没有用
因此:密钥的传输也必须加密传输
但是要相对密钥进行对称加密,就仍然需要先协商确定一个“密钥的密钥”,这就成为“先有鸡还是先有蛋”的问题,此时密钥的传输再用对称加密就不行了
就需要引入非对称加密

2.引入非对称加密

  1. 公钥:公开的钥匙,可以对所有人开放(即便被黑客劫持也没关系)
  2. 私钥:私有的钥匙,自己独享

公钥和私钥的关系: 通过私钥,基于一定的算法,可以生成一个公钥
公钥和私钥作用: 都可以加密,也都可以解密
公钥和私钥的位置: 可以是客户端,也可以是服务端
https单向认证: 客户端用户希望访问的网站是真正的没有被篡改过的网站(保证服务端的安全),服务端保存自己的私钥,服务端提供公钥(通过自己私钥生成)给客户端。(保证服务端安全即可)这里是用于开放性的网站,不需要服务端保证客户端的安全(所有人都能访问)
https双向认证: 需要保证服务端是安全的(客户端拿到的服务端数据是安全的),也同时需要保证客户端的安全(经常用于一些只能某类用户访问的网站,比如银行网站)

后续提到的都是单向认证

生成密钥的流程:

  1. 客户端给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法(明文传输)
  2. 服务端确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)(明文传输)
  3. 客户端确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务端(密文传输)
  4. 服务端使用自己的私钥,获取服务端发来的随机数(即Premaster secret)
  5. 客户端和服务端根据约定的加密方法,使用前面的三个随机数,生成“对话密钥”(session key),用来加密接下来的整个对话过程

关于 “数字证书”:包含公钥,及网站信息
服务端给的证书类似我们去餐馆吃饭,如何确定不是黑店,就要检查营业执照,这里的营业执照就类似数字证书
关于 “客户端确认数字证书是否有效” :浏览器安装时就默认内置了一些CA权威机构的证书,这个证书用来校验服务端证书是否是真实安全的
CA证书类似工商局(权威)可以检查餐馆营业执照是否是安全的

传输数据:使用对称加密(密钥是以上非对称加密流程最后生成的相同的密钥)

3.简要流程:

  1. 非对称加密生成对话密钥(两次明文传输两个随机字符串,一次密文传输一个随机字符串,客户端和服务端都分别基于这三个随机字符串来生成相同的对话密钥)
  2. 对称加密来传输数据(客户端使用第一步生成的密钥对发送的请求数据加密,服务端也使用相同的密钥对接收的请求进行解密(对称加密);响应也是类似,服务端使用对话密钥加密,客户端使用同样的密钥来解密)

猜你喜欢

转载自blog.csdn.net/m0_51405559/article/details/122987917