HTTPS的加密流程

1.HTTPS是什么?

HTTPS是一个应用层协议,是在HTTP协议的基础上引入一个加密层,对报头(header)和正文(body)进行加密,以免在传输中被黑客截获或篡改。

2.加密的方法

加密通常有两种方式,对称加密和非对称加密。对称加密是使用一个密钥进行加密和解密:

  • 加密过程:明文加密钥,生成密文;
  • 解密过程:密文加密钥,生成明文;

非对称加密有两个密钥,公钥和私钥,使用公钥加密时,需要使用私钥解密,使用私钥加密时,需要使用公钥解密:

  • 加密过程:明文加公钥/私钥,生成密文;
  • 解密过程:密文加私钥/公钥,生成明文;

3.对称加密

服务器通过使用密钥对明文请求加密,生成密文请求,再将密文请求传输给服务器。服务器接收到密文请求后,使用密钥解密生成明文请求。同理,服务器使用相同的方法,给客户端发送响应。中间即使经过黑客的设备,黑客的设备因为没有密钥,即使截获到密文请求/响应,也没有办法解密或者篡改。

但是实际上,服务器需要和许多客户端进行通讯,那么就需要知道每个客户端的密钥,每个客户端的密钥必须是不同的,否则黑客也会很容易获取密钥进行破解。比较理想的做法是,每次进行通讯时,服务器都和客户端协商好本次通讯的密钥。但密钥不能明文传输,同样也需要进行加密,这就需要用到新的密钥取给原本的密钥加密,新的密钥也需要告知服务器。因此这个过程最开始总会先涉及到明文传输密钥,有可能被黑客截获。此时使用对称加密的方式不可行,需要引入非对称加密。

对称加密的通讯过程:

4.非对称加密

为了解决对称加密的安全问题,引入了非对称加密。非对称加密需要用到公钥和私钥。服务器首先会生成一对公钥和私钥,把公钥返回给客户端,并将私钥保存好。每次进行通讯时,客户端会和服务器协商本次通讯使用的对称密钥,再将协商好的对称密钥使用公钥加密,传输给服务器,服务器会用手中的私钥进行解密,获取对称密钥。之后客户端和服务器使用对称密钥加密,进行通讯。即使中间设备被黑客入侵,黑客只能截获到加密后的对称密钥,而黑客手中没有私钥,无法获取到对称密钥,对数据进行篡改。

引入非对称加密,通讯过程如下:

问题:既然已经引入非对称加密,为啥还要用对称加密进行通讯?为什么不用非对称加密完成所有业务数据的传输?

非对称加密的运算成本比较高,运算速度也比较慢。对称加密的运算成本低,且运算速度快。因此非对称加密只用于关键环节,比如传输对称密钥,这样运算成本可控。后续要传输大量的业务数据,使用效率更高的对称加密,是更加合理的做法。如果所有业务数据都使用非对称加密,那么传输效率会受到严重影响。

5.中间人攻击

上述对称加密结合非对称加密的方式,是HTTPS的主要逻辑。但是上述流程还有一个比较严重的漏洞,仍然可能会出现数据泄露或被篡改的问题,这个问题就是中间人攻击。

服务器会提前生成一对公钥pub1和私钥pri1,黑客设备也会提前生成一对公钥pub2和私钥pri2。客户端在和服务器刚开始建立连接的时候,客户端会向服务器询问公钥,服务器会给客户端返回公钥pub1,黑客设备会替换公钥pub1,将自己的公钥pub2发送给客户端,客户端拿到pub2后,会将自己的对称密钥通过pub2加密,发送给服务器,黑客设备会通过自己的私钥pri2解密拿到对称密钥key1,并将自己的对称密钥key2通过pub1加密后发送给服务器。服务器收到数据后,会使用私钥pri1解密,拿到对称密钥key2。之后黑客设备就可以通过key1和key2分别和客户端服务器通讯,拿到所有的通讯数据。

中间人攻击过程如下图:

6.解决中间人攻击问题的方法

为了解决中间人攻击的问题,引入了证书。当客户端和服务器建立连接的时候,服务器给客户端返回一个证书。证书类似于网站的身份证,搭建一个HTTPS网站都需要向第三方公证机构申请一个证书。证书可以理解为是一段结构化的数据,包含证书发布机构,证书有效期,服务器公钥,网站的域名,数字签名等信息。

公证机构也会生成一对公钥和私钥,公证机构自己持有私钥,公钥发布给各个客户端设备。颁发证书的时候公证机构会针对数字证书的各个属性计算出一个检验和,再使用自己的私钥对校验和进行加密,最终得到数字签名。

客户端拿到数字证书之后,会使用第三方公证机构的公钥进行解密,拿到数字证书的校验和以及服务器的公钥。客户端同样也会重新计算数字证书的校验和,并和解密得到的校验和进行对比,如果相同,则认为证书没有被篡改过。

如果黑客拿到证书后,篡改里面的公钥,客户端收到数字证书校验的时候就会发现校验和不一致,并提示用户存在安全风险。并且黑客也无法篡改数字签名,因为数字签名的生成是需要使用第三方公证机构的私钥对校验和进行加密,黑客没有这个私钥,因此无法篡改数字签名。

7.总结

HTTPS的加密过程分为以下3个过程:

  • 1.使用对称密钥对业务数据进行加密;
  • 2.使用非对称密钥加密对称密钥;
  • 3.使用第三方公证机构的数字证书,校验服务器公钥,避免中间人攻击;

结合上述三个机制确保HTTPS协议的安全性。

相关推荐
拾忆,想起1 小时前
Dubbo异步调用实战指南:提升微服务并发性能
java·服务器·网络协议·微服务·云原生·架构·dubbo
阿巴~阿巴~7 小时前
基于UDP协议的英汉翻译服务系统:从网络通信到字典查询的完整机制
linux·服务器·网络·网络协议·udp协议·套接字绑定·英汉翻译服务系统
another heaven8 小时前
【计算机网络 HTTP 请求参数规范详解】
网络协议·计算机网络·http
慧慧吖@10 小时前
sse,短轮询,长轮询,webSocket
网络·websocket·网络协议
AiXed14 小时前
PC微信协议之nid算法
python·网络协议·算法·微信
赖small强16 小时前
【ZeroRange WebRTC】Amazon Kinesis Video Streams WebRTC Data Plane REST API 深度解析
https·webrtc·data plane rest·sigv4 签名
Laravel技术社区17 小时前
海康视频 h5player 配置 proxy 代理websocket播放视频问题(websocket在业务系统https方式访问http的播放视频)
websocket·http·音视频
果壳~18 小时前
【Java】使用国密2,3,4.仿照https 统一请求响应加解密
java·https
阿巴~阿巴~19 小时前
IPv4地址转换函数详解及C++容器安全删除操作指南
linux·服务器·c++·网络协议·算法·c++容器安全删除操作·ipv4地址转换函数
百***670319 小时前
Node.js实现WebSocket教程
websocket·网络协议·node.js