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协议的安全性。

相关推荐
要加油哦~17 小时前
前端八股文 | HTTP - 实时通信方式/前后端通信方式
网络·网络协议·http
00后程序员张17 小时前
iOS 26 App 运行状况全面解析 多工具协同监控与调试实战指南
android·ios·小程序·https·uni-app·iphone·webview
2501_9160074718 小时前
iOS 混淆实战,多工具组合完成 IPA 混淆、加固与发布治理(iOS混淆|IPA加固|无源码混淆|App 防反编译)
android·ios·小程序·https·uni-app·iphone·webview
2501_9159184118 小时前
怎么上架 App?iOS 应用上架完整流程详解与跨平台发布实战指南
android·ios·小程序·https·uni-app·iphone·webview
2501_9160088918 小时前
iOS 混淆工具链实战 多工具组合完成 IPA 混淆与加固(iOS混淆|IPA加固|无源码加固|App 防反编译)
android·ios·小程序·https·uni-app·iphone·webview
明月与玄武20 小时前
Wireshark 网络抓包分析:JSON 和 HTTPS!
https·wireshark·json
李昊哲小课20 小时前
spring 中 HttpStatus 与 ResponseEntity
spring boot·后端·spring·http·spring cloud·restful
编程爱好者熊浪20 小时前
测试需要使用HTTPS,怎么申请一个免费的测试域名
网络协议·http·https
limuyang220 小时前
【http3/quic】cronet 已经原生集成在Android内啦!还不快来开开眼!
android·http·google
helloworld工程师21 小时前
Dubbo应用开发之RPC直连开发
网络协议·rpc·dubbo