HTTPS 协议

4.HTTPS

HTTPS 也是一个应用层协议。是在 HTTP 协议的基础上引入了一个加密层(SSL)

HTTP 协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况。

4.1 对称加密和非对称加密

对称加密:加密和解密使用同一个秘钥

非对称加密:公钥加密后只能用私钥解开。反过来,私钥加密后只能用公钥解开

复制代码
## 4.2 几种策略

只使用对称加密通信:很容易解密数据

只使用非对称加密通信:缺点是服务端能解密客户端发送的数据,但是客户端却解密不了服务端的数据

使用双向非对称加密:缺点是速度慢

使用非对称加密和对称加密组合

4.3 中间人攻击

如果最开始,中间人就已经在监听了,那么上面几种策略都会有问题
中间人攻击(Man-in-the-MiddleAttack) ,简称MITM攻击,具体流程如下

  1. 服务器具有⾮对称加密算法的公钥S,私钥S'
  2. 中间⼈具有⾮对称加密算法的公钥M,私钥M'
  3. 客户端向服务器发起请求,服务器明⽂传送公钥S给客⼾端
  4. 中间⼈劫持数据报⽂,提取公钥S并保存好,然后将被劫持报⽂中的公钥S替换成为⾃⼰的公钥M,并将伪造报文发客户端
  5. 客户端收到报⽂,提取公钥M(自己当然不知道公钥被更换过了),自己形成对称秘钥X,⽤公钥M加密X,形成报⽂发送给服务器
  6. 中间人劫持后,直接⽤⾃⼰的私钥M'进⾏解密,得到通信秘钥X,再⽤曾经保存的服务端公钥S加密后,将报文推送给服务器
  7. 服务器拿到报⽂,⽤自己的私钥S'解密,得到通信秘钥X
  8. 双⽅开始采⽤X进⾏对称加密,进⾏通信。但是⼀切都在中间⼈的掌握中,劫持数据,进⾏窃听甚⾄修改,都是可以的

问题的关键在于:Client无法确定Server发来的公钥是否是合法的

4.4 CA认证

服务端在使⽤HTTPS前,需要向CA机构(Certificate Authority)申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就行了,证书就如⾝份证,证明服务端公钥的权威性

下面是几个概念:

  • 数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被修改。
  • 摘要经过加密,就得到数字签名

数字签名的加密步骤:

  1. CA机构拥有非对称加密的私钥A和公钥A'
  2. CA机构对服务端申请的证书明文数据进⾏hash,形成数据摘要
  3. 然后对数据摘要用CA私钥A'加密,得到数字签名S

服务端申请的证书明文和数字签名S共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了


数字证书的校验:

4.5 非对称加密+对称加密+证书认证

在客户端和服务器刚⼀建立连接的时候,服务器给客户端返回⼀个证书,证书包含了之前服务端的公钥,也包含了网站的⾝份信息. 当客户端确认信息是从服务端发送来的,之后的过程与之前一样。

Client只认CA的公钥,同时只有CA能进行证书的签发,因为只有CA有秘钥**,中间人没有资格进行证书的全新形成**

完整流程如下:

相关推荐
威斯软科的老司机1 小时前
WebSocket压缩传输优化:机器视觉高清流在DCS中的低延迟方案
网络·websocket·网络协议
Whisper_Yu2 小时前
计算机网络(一)基础概念
计算机网络·http·https·信息与通信
emojiwoo4 小时前
HTTP 状态码背后的逻辑:从请求到响应的完整流程解析(含完整流程图)
网络·网络协议·http
娅娅梨4 小时前
HarmonyOS-ArkUI Web控件基础铺垫7-HTTP SSL认证图解 及 Charles抓包原理 及您为什么配置对了也抓不到数据
http·华为·ssl·harmonyos
渡我白衣4 小时前
Linux网络:应用层协议http
linux·网络·http
GilgameshJSS5 小时前
【学习K230-例程19】GT6700-TCP-Client
网络·python·网络协议·学习·tcp/ip
木头左7 小时前
讯飞星火大模型Spark4.0Ultra的WebSocket交互实现解析
websocket·网络协议·交互
paopaokaka_luck8 小时前
绿色环保活动平台(AI问答、WebSocket即时通讯、协同过滤算法、Echarts图形化分析)
java·网络·vue.js·spring boot·websocket·网络协议·架构
wow_DG8 小时前
【WebSocket✨】入门之旅(三):WebSocket 的实战应用
网络·websocket·网络协议
yuanpan8 小时前
使用Python创建本地Http服务实现与外部系统数据对接
开发语言·python·http