前言:本文将简单介绍一下HTTPS的加密流程,以及中间人攻击的基本原理和防御措施
一,为什么需要HTTPS协议
原因很简单,HTTP数据包明文传输的特性,导致在通信的流程中可能会出现数据泄露的风险,相当于一个数据包在网络中裸奔,只要有心人通过抓包,就能轻易的获取到你的Cookie、账号密码. 毕竟,你也不想你深夜浏览网站的信息被人知道吧~~
HTTPS协议其实可以看作是基于HTTP协议的基础上又做了一层加密处理,可以视为安全版本的HTTP协议Promax版.
在目前,HTTPS协议已经成为主流网站的通用协议
那么HTTPS协议是如何给HTTP穿上一层衣服,实现数据加密的呢?本文不涉及到那些晦涩难懂的加密算法,下面来简要说明一下其核心加密流程
二,加密算法的演进
(一)对称加密
对称加密的核心特征是:加密和解密都使用同一把密钥
什么意思呢?相当于现在的智能汽车的车钥匙,只需要按一下钥匙上的按钮就能实现汽车的加锁解锁操作,把功能集成到一个钥匙上面.对称加密使用的密钥也叫做对称密钥.
1.对称加密流程
对称密钥的使用大致需要分为这些步骤:
- 1.客户端生成对称密钥:
- 2.使用对称密钥把发送的数据进行加密
- 3.把对称密钥发送给服务器
- 4.服务器拿到对称密钥和数据,开始解密

这就是对称加密的大致过程,但是同时也存在几个问题
- 1.对称密钥不能使用明文传输,如果使用明文传输就相当于你发现了一个宝箱,宝箱的外面恰好写着解密方法,这样一来密钥就失去了其意义.
- 2.要想使得对称密钥不以明文传输就需要对对称密钥进行加密
可能这里有人会想:对密钥进行加密,这好像给保险箱外再加一层保险箱,好像套娃啊~~ 这样真的有意义吗? 其实是有的
2. 对对称密钥进行加密
给密钥进行加密,其实并非套娃,也有其存在的必要性,如果给密钥加密,那么就可以把密钥分为两类,分别是:
-
DEK (Data Encryption Key,数据加密密钥) :专门用来加密实际的数据(比如你的银行流水、聊天记录)。它的特点是一事一议,用完即弃或频繁更换。
-
KEK (Key Encryption Key,密钥加密密钥):专门用来加密 DEK。它的级别更高,保护得更严密。
密钥加密密钥的作用
- 密钥轮转(Key Rotation)更高效 : 如果你有 1TB 的加密数据,想更换密钥时,不需要把 1TB 数据全部解密再重新加密。你只需要用新的 KEK 把那个小小的 DEK 重新加密一遍即可。
- 合规与隔离: 数据(被加密的)可以存在普通的云硬盘上,而加密 DEK 的"钥匙"则可以存在更安全的专用硬件(如 HSM)中。
- 减少暴露风险: DEK 频繁参与运算,暴露风险高;而 KEK 只在加密 DEK 的那一瞬间露面,大部分时间都处于静止保护状态。
3.对称加密的缺陷:密钥分发难题
上面的密钥加密密钥的做法看似很美好,但是显然还存在一个问题,那就是:只能确保密钥不被解密,但是不能确保密钥正确传达到服务器手上
什么意识呢?就好比你寄快递,快递做了层层包裹,但是在运输快递的过程中,出现了抢劫事件,密钥被劫持了.虽然对方的手上没有解密这个密钥的手段,但是其目的也间接的达成了 : 使得服务器没有密钥,无法解密数据处理请求

这也就是一个矛盾的问题: 密钥传输的通道不一定是绝对安全的,如何在不安全的信道上,安全地交换秘密?
这黑客也太坏了吧! 有没有方法能解决这个问题呢?自然是有的,那就不得不提到非对称加密了~~
(二)非对称加密
上面的加密的流程虽然都在不断变化,但是都逃不掉一个流程: 由一方生成密钥,再把这个秘钥发送给对方, 加密和解密都由同一把密钥完成,即使采用密钥加密密钥,但是在加密的时候还是需要进行二次加密,第一次是DEK对数据加密,第二次是KEK对密钥加密,
于是就于这一点上做出来改变,把加密和解密这两个步骤分开,把密钥分为两大类,分别是公钥和私钥,这两把密钥都是服务器生成的
- 1.公钥:服务器生成之后把它公之于众,告诉大家:以后你们就用这个公钥来给我加密数据嗷~~
- 2.私钥:服务器自己持有,接收到的数据就使用这个私钥来完成解密
这一点类似于:即便全世界都知道如何给你"上锁"(公钥加密),也只有你一个人能"开锁"(私钥解密)
这个过程反过来也是行得通的,用私钥加密的数据,只能用对应的公钥解开
1.非对称加密流程
非对称加密的流程可以简单概括为 : 公钥加密,私钥解密
- 1.服务器生成公钥和私钥
- 2.客户端向服务器索要公钥,服务器返回公钥
- 3.客户端随机生成对称密钥
- 4.客户端拿到公钥之后,使用公钥加密对称密钥,
- 5.客户端使用加密后的对称密钥来加密业务数据
- 6.服务器拿到数据,使用自己的私钥完成解密,处理请求
- 7.后续服务器返回的数据就使用对称密钥加密

可以看到,数据的加密和解密被分开了,即使在数据发送的中途被黑客窃取,由于私钥只在服务器的手上,所以黑客此时手上最多只有公钥以及加密的数据,但是加密的数据却不能解密出来
2.混合加密的作用
在非对称加密中使用了对称密钥,这种加密方式也叫做混合加密,作用如下:
- 1.通过公钥和私钥的配合,解决了对称密钥分发问题
- 2.效率提高: 开销大的公钥私钥只在握手阶段使用(公钥加密对称密钥, 私钥解密对称密钥) ,但是后续大量的的业务数据加密解密中,只使用对称密钥来解密数据,性能大幅度提高
- 3.密钥 的一致性与时效性提高: 要知道对称密钥是由客户端随机生成,每次刷新网页或重新建立连接,客户端都会生成一个新的对称密钥 , 这样即使黑客在很多年后拿到了服务器的私钥,他也无法解密以前的流量 ,因为每一段对话的对称密钥都是随机生成且已经销毁了的。
我们可以用一个形象的表格对比两者的分工:
| 阶段 | 任务 | 使用的工具 | 原因 |
|---|---|---|---|
| 握手阶段 | 安全地交换"保险箱钥匙" | 非对称加密 (公钥/私钥) | 解决信任和分发问题 |
| 通信阶段 | 加密传输具体的业务数据 | 对称密钥 (Session Key) | 保证传输速度和 CPU 低负载 |
三,中间人攻击
但这也不是一劳永逸的办法,黑客还想出来了一种方式来神不知鬼不觉地窃取数据,那就是中间人攻击
简单来说,中间人攻击就好比一个数字间谍,让你和通信对端的所有数据都经过其手中,然后进行篡改数据的操作
(一)中间人攻击的逻辑
我们知道客户端需要先向服务器申请公钥,然后服务器才能返回.就好比:朕给你的你才能拿~~ 中间人就可以偷偷的把服务器返回的公钥给替换成他自己的公钥,再把伪造的公钥返回给服务器. 这听起来是不是很像古代时的奸臣赵高修改遗嘱,立帝胡亥,赐死扶苏的骚操作呢~~ 不过中间人这个角色在客户端和服务器看来是透明的,不知有其人
替换公钥,窃取数据的操作是如何实现的?下面是一个简易的流程图

中间人攻击通过替换密钥的操作,在双方都不知情的情况下拿到了对称密钥, 为了不被发现, 还再次对数据进行重加密,做到了偷梁换柱,身份冒充
(二)常见的攻击手段
作为网络黑客,攻击手段自然层出不穷,而常见的攻击手段就有:
-
ARP 欺骗 (ARP Spoofing) ------ 局域网杀手
-
手段: 在局域网内广播伪造的 ARP 包,告诉你的电脑"我(攻击者)是路由器",同时告诉路由器"我(攻击者)是你(目标用户)"。
-
效果: 局域网内的流量全部流经攻击者的网卡。
-
-
DNS 欺骗 (DNS Cache Poisoning)
-
手段: 污染 DNS 缓存,将
github.com对应的 IP 地址改为攻击者的服务器 IP。 -
效果: 用户在浏览器输入正确地址,却访问了钓鱼网站。
-
-
SSL 剥离 (SSL Stripping)
-
手段: 强制将 HTTPS 降级为 HTTP。当用户访问网站时,中间人将服务器发回的 HTTPS 链接改为 HTTP 链接。
-
效果: 通信变成明文,加密形同虚设。
-
-
伪造 Wi-Fi 热点 (Rogue Hotspot)
-
手段: 在商场等公共场所建立一个名为
Starbucks_Free_WiFi的开放热点。 -
效果: 连上的人所有流量都在攻击者掌控之下。
-
(三)使用数字证书防备中间人攻击
归根结底,中间人攻击成功的关键就在于,替换服务器返回的公钥,把黑客的公钥返回给客户端,客户端在不知情的情况下就使用伪造的公钥来加密对称密钥.
在这个过程中,如果客户端能够确认返回的公钥一定是服务器发送的,那是不是就能防备了呢?
简单来说,就是要建立起公钥的权威性,解决这个"身份信任"问题 : 我收到的公钥一定是服务器的 ,而这种类似于身份验证的东西,也就是数字证书
数字证书引入了一个全人类都信任的"第三方"------ CA。
-
内容: 证书里包含了服务器的公钥、服务器的域名、过期时间,以及 CA 的数字签名(本质是校验和)。
-
验证过程:
-
服务器 B 把自己的公钥发给 CA,CA 用自己的私钥对 B 的公钥进行加密,生成数字签名,合在一起就是"证书"。
-
客户端(你的浏览器)内置了全球主要 CA 的公钥。
-
当你访问服务器 B 时,B 发来证书。你的浏览器用 CA 的公钥解开签名。如果能解开,说明这个证书确实是 CA 签发的,里面的公钥确实属于服务器 B。如果客户端使用CA的公钥进行校验和运算后,发现运算得到的校验和结果和证书中的数字签名不一致,就能知道有黑客篡改了证书
-


为什么黑客不替换整个数字整数呢?这其实是因为它由受信任的 CA(证书颁发机构) 签名限制,即使黑客替换了证书中的任何一个比特位,但是数字签名是由CA的私钥生成的,黑客伪造的话,就会出现传到客户端时出现客户端内置的私钥解密时,出现校验和异常(哈希错误)
即便黑客搞到了一个合法的、针对你域名的证书(比如通过漏洞攻击了某个小 CA),还有以下机制在把关:
-
HSTS (HTTP Strict Transport Security): 强制浏览器只通过 HTTPS 访问。如果黑客试图降级到 HTTP 或提供一个可疑证书,浏览器会直接断开连接,不给用户点击"忽略警告"的机会。
-
HPKP / Certificate Pinning: 某些应用(如手机银行 App)会硬编码特定证书的指纹。即便黑客提供了一个由正规 CA 签发的合法证书,只要指纹不匹配,App 也会拒绝连接。
-
CT 日志 (Certificate Transparency): 所有的合法证书签发记录都是公开可查的。黑客如果冒名申请了你的证书,很快就会被自动化脚本监测到。
中间人攻击的本质,就是为了替换公钥拿到对称密钥,但是引入数字证书,可以从源头上防备中间人攻击(替换了公钥 客户端能发现异常)
以上就是本文全部的大致内容,如有纰漏还请指出~~