【网络安全】https协议的加密方案避免中间人攻击(MITM攻击)导致的数据泄露风险

目录

引言

概念准备

中间人

加密

[数据摘要 && 数据指纹](#数据摘要 && 数据指纹)

数字签名

密钥加密

中间人攻击

CA证书

https加密的解决方案


个人主页:东洛的克莱斯韦克-CSDN博客

引言

http在应用层协议中是明文传输协议,它是通信双方传输数据时的一种约定。【网络】HTTP协议-CSDN博客

用http协议传输数据,其数据包在全网内是公开的。在局域网中第三方设备把自己的网卡的工作模式设为混杂模式,或者用一些抓包软件很容易监听并解析出其他人的通信内容,如果涉及一些隐私信息就会造成信息泄露的风险。

而https是在http的基础上做了一层加密,本文探讨https是如何做到加密的。

概念准备

在探讨之前先铺垫一些概念~

中间人

中间人的攻击对象是客户端,在C/S架构或B/S架构中,中间人要窃取的是客户端的数据。

数据包从客户端到服务端需要经过一些中间设备,比如局域网中的路由器,运营商的服务器等等,http协议的数据包并没有加密,而数据包又要经过中间设备,黑客只需劫持一些中间设备或想办法让自己成为中间设备(比如建立假网站)就能轻松拿到客户端的和服务端之间交互的数据包。

下面是让自己成为中间人的几种方式

|------------------------------------------------------------------------------------------------------------------------------------|
| ARP 欺骗:在局域网中, hacker 经过收到 ARP Request ⼴播包,能够偷听到其它节点的 (IP, MAC) 地址。例, 黑客收到两个主机 A, B 的地址,告诉 B ( 受害者 ) ,自己是 A ,使得 B 在发送给 A 的数据包都被黑客截取 |
| ICMP 攻击:由于 ICMP 协议中有重定向的报文类型,那么我们就可以伪造一个ICMP 信息然后发送给局域网中的客户端,并伪装自己是一个更好的路由通路。从而导致⽬标所有的上网流量都会发送到我们指定的接⼝上,达到和 ARP 欺骗同样的效果 |
| 假 wifi && 假网站等 |

加密

加密就是把 明文 ( 要传输的信息 ) 进行一系列变换 , 生成 密文 解密就是把 密文 再进行一系列变换 , 还原成 明文 。在这个加密和解密的过程中, 往往需要一个或者多个中间的数据 , 辅助进行这个过程 , 这样的数据称为 密钥
公开的密钥称为公钥,非公开的密钥称为私钥。
对称加密:用同一个密钥(私钥)加密和解密。 算法公开、计算量⼩、加密速度快、加密效率⾼
相关算法:
DES(使用密钥加密的块算法)
三重数据加密算法
BLOWFISH
非对称密钥:用对公钥和私钥进行加密和解密。用公钥加密只能用私钥解密,用私钥加密只能用公钥解密。算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。

数据摘要 && 数据指纹

数字指纹 ( 数据摘要 ), 其基本原理是利用单向散列函数 (Hash 函数 ) 对信息进行运算 , 生成一串固定⻓度的数字摘要。数字指纹并不是一种加密机制, 但可以用来判断数据有没有被篡改。
摘要常见算法:有 MD5 、 SHA1 、 SHA256 、 SHA512 等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
摘要特征:和 加密算法 的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比

数字签名

摘要经过加密,就得到 数字签名

密钥加密

下面用对称加密和非对称加密结合的方案,假设黑客一定能用中间设备窃取数据

服务端有自己的一对公钥S和私钥S*

客户端向服务端发起请求,获取服务端的公钥S,黑客也一定能拿到公钥S。

客户端在本地生成自己的私钥C,然后用服务端的公钥S加密,即使有中间设备,但该数据包只有服务端的私钥S*解密,私钥C只有客户端和服务端知道,从次双方用私钥C对称加密进行通信,至此通信双方完成密钥协商。

那么这样真的是安全的吗?

并不是,如果黑客一开始就把服务器的公钥S掉包了呢?

中间人攻击

上述方案中并没有让黑客参进密钥协商,假设黑客也有一对自己的公钥M和私钥M*,黑客如果把服务端的公钥S掉包成自己的公钥M给客户会怎么样呢

客户端拿到黑客的公钥M,在本地生成自己的私钥C。用黑客的公钥M加密,然后再向服务器发起请求,黑客很自然的用自己的私钥M*解密,拿到客户端的私钥C,然后用服务端的公钥S加密向服务端发起请求,至此客户端,黑客,服务端都拿到密钥C,客户端和服务端用密钥C进行对称加密通信,但双方并不知道有第三方也拿到了密钥C。

上述通信方案最根本的问题是,客户端无法证明服务器第一次响应的公钥M是不是真的,而公钥M自身也不能证明自己是真的。

只要能证明服务器第一次响应的公钥M是真的,就可以完成密钥协商,然后用对称加密通信,下面就要引入CA证书的概念了。

CA证书

CA证书是由证书颁发机构(Certificate Authority,简称CA)签发的数字证书。它包含了证书申请者的信息(如域名、组织信息等)、公钥信息以及证书颁发机构的签名。证书的作用类似于现实生活中的身份证,它证明了服务端公钥的权威性和可信度,确保了公钥与服务器身份之间的绑定关系。

服务器端在使用HTTPS之前,需要向CA机构申领一份数字证书。这个过程中,服务器会向CA提交证书签名请求(Certificate Signing Request,简称CSR),CSR文件中包含了服务器的公钥信息和一些必要的信息(如域名、组织信息等)。CA机构在收到CSR后,会对申请者的身份和申请信息进行审核。审核通过后,CA会使用自己的私钥对CSR中的信息进行签名,生成最终的数字证书,并颁发给申请者。

CA证书是一个结构化的字符串,其中包含了以下关键信息

|-----------------------------------------|
| 证书发布机构:即签发证书的CA机构的名称。 |
| 证书有效期:证书的有效时间范围,超过这个时间范围的证书将不再被认为是有效的。 |
| 公钥:服务端的公钥信息,这是证书中最核心的部分,用于后续的数据加密和解密。 |
| 证书所有者:证书申请者的信息,包括域名、组织名称等。 |
| 签名:CA机构使用自己的私钥对证书内容进行签名,确保证书内容的完整性和真实性。 |

理解CA证书只需理解最核心的两个东西即可

一个是公钥,CA证书里的公钥是服务端的公钥,上文已经提到,CA证书就是为了证明服务端的公钥自身是没有被掉过包的。

那么CA证书怎么能证明服务端公钥的合法性呢?那就是数字签名

CA机构会把证书内容摘要算法比如MD5形成数据指纹,再把数据指纹用CA自己的私钥加密形成数据签名,而客户端会内置CA机构的公钥。

那么客户端一定能辨别证书的真假,有如下场景来解释为什么~

1.黑客只篡改证书内容,但客户端可以通过比对数据指纹来判断证书是否被修改过。

2.黑客篡改证书内容的同时重新用摘要算法形成数据指纹,但黑客没有给证书签名的能力,因为只有CA机构才有私钥。

3.黑客拿真证书掉包,但客户端可以比对公钥,域名,法人信息等判断证书的合法性。

CA证书有自证的能力,那么CA证书中服务器公钥也有自证能力,下面就是https的加密方案。

https加密的解决方案

https采用非对称加密 + 对称加密 + 证书认证的方案进行密钥协商

相关推荐
Petrichor-瑾28 分钟前
HTTP和HTTPS的区别
网络·http·https
丢爸2 小时前
网络学习-eNSP配置NAT
linux·网络·学习
沐风ya2 小时前
NAT技术介绍+缺陷(内网穿透+工具),NAPT(介绍,替换过程,原理,NAT转换表)
linux·服务器·网络
天启代理ip3 小时前
HTTP隧道代理:互联网冲浪的隐形翅膀
服务器·网络·爬虫·网络协议·tcp/ip
6230_3 小时前
关于HTTP通讯流程知识点补充—常见状态码及常见请求方式
前端·javascript·网络·网络协议·学习·http·html
日记成书4 小时前
【无线通信发展史⑨】1791年路易吉·伽伐尼-关于动物电的研究与1800年亚历山大·伏打伯爵-电池:伏打电池
网络·人工智能·学习·职场和发展·信息与通信
achirandliu5 小时前
SOME/IP 通信协议详细介绍
网络·网络协议·tcp/ip·some/ip
我晕死哦5 小时前
Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法
python·网络协议·http·pycharm
长安初雪6 小时前
计算机网络 第三章: 数据链路层概述
网络·网络协议·计算机网络
铁蛋Q6 小时前
基于udp的socket网络编程
网络·网络协议·udp