您现在的位置是:首页 >技术杂谈 >HTTPS 协议原理总结网站首页技术杂谈

HTTPS 协议原理总结

fjgfkhfkgh 2025-04-22 00:01:03
简介HTTPS 协议原理总结

目录
一:🔥 HTTPS 是什么
🦋 定义
二:🔥 概念准备
🦋 什么是"加密"
🦋 为什么要加密
🦋 常见的加密方式
🦋 数据摘要 && 数据指纹
🦋 数字签名
🦋 理解链 - 承上启下
三:🔥 HTTPS 的工作过程探究
🦋 方案 1 - 只使用对称加密
🦋 方案 2 - 只使用非对称加密
🦋 方案 3 - 双方都使用非对称加密
🦋 方案 4 - 非对称加密 + 对称加密
四:🔥 中间人攻击
五:🔥 引入证书
🦋 SSL/TLS 协议
🦋 SSL/TLS 使用 CA 证书
🦋 CA 认证
🦋 理解数据签名
🦋 方案 5 - 非对称加密 + 对称加密 + 证书认证
🦋 客户端进行认证
🦋 查看浏览器的受信任证书发布机构
🦋 中间人有没有可能篡改该证书?
🦋 中间人整个掉包证书?
六:🔥 常见问题
🦋 为什么摘要内容在网络传输的时候一定要加密形成签名?
🦋 为什么签名不直接加密, 而是要先 hash 形成摘要?
🦋 如何成为中间人 - 了解
🦋 完整流程
七:🔥 总结
八:🔥 共勉
一:🔥 HTTPS 是什么
🦋 定义
🧑‍💻 HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层.

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

二:🔥 概念准备
🦋 什么是"加密"
加密就是把 明文 (要传输的信息)进行一系列变换, 生成 密文 .
解密就是把 密文 再进行一系列变换, 还原成 明文 .
在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密钥 .
🦋 为什么要加密
🧑‍💻 臭名昭著的 “运营商劫持”
🌰 下载一个 天天动听
⏬ 未被劫持的效果, 点击下载按钮, 就会弹出天天动听的下载链接.

⏬ 已被劫持的效果, 点击下载按钮, 就会弹出 QQ 浏览器的下载链接

🦁 由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器,交换机等), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改.

🐯 点击 “下载按钮”, 其实就是在给服务器发送了一个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP 的下载链接. 运营商劫持之后, 就发现这个请求是要下载天天动听,那么就自动的把交给用户的响应给篡改成 “QQ 浏览器” 的下载地址了.

🔒 所以: 因为 http 的内容是明文传输的, 明文数据会经过路由器、 wifi 热点、 通信服务运营商、 代理服务器等多个物理节点, 如果信息在传输过程中被劫持, 传输的内容就完全暴露了。 劫持者还可以篡改传输的信息且不被双方察觉, 这就是 中间人攻击 , 所以我们才需要对信息进行加密。

💻 不止运营商可以劫持, 其他的 黑客 也可以用类似的手段进行劫持, 来窃取用户隐私信息,或者篡改内容.

🎩 试想一下, 如果黑客在用户登陆支付宝的时候获取到用户账户余额, 甚至获取到用户的支付密码…

在互联网上, 明文传输是比较危险的事情!!!

👮 HTTPS 就是在 HTTP 的基础上进行了加密, 进一步的来保证用户的信息安全~

🦋 常见的加密方式
对称加密

采用单钥密码系统的加密方法, 同一个密钥可以同时用作信息的加密和解密, 这种加密方法称为对称加密, 也称为单密钥加密, 特征: 加密和解密所用的密钥是相同的
常见对称加密算法(了解): DES、 3DES、 AES、 TDEA、 Blowfish、RC2 等
特点: 算法公开、 计算量⼩、 加密速度快、 加密效率⾼
对称加密其实就是通过同一个 “密钥” , 把明文加密成密文, 并且也能把密文解密成明文.

一个简单的对称加密, 按位异或

假设 明文 a = 1234, 密钥 key = 8888

则加密 a ^ key 得到的密文 b 为 9834.

然后针对密文 9834 再次进行运算 b ^ key, 得到的就是原来的明文 1234.

(对于字符串的对称加密也是同理, 每一个字符都可以表⽰成一个数字)

当然, 按位异或只是最简单的对称加密. HTTPS 中并不是使用按位异或.

非对称加密

需要两个密钥来进行加密和解密, 这两个密钥是公开密钥(public key,简称公钥) 和私有密钥(private key, 简称私钥) 。
常见非对称加密算法(了解): RSA, DSA, ECDSA
特点: 算法强度复杂、 安全性依赖于算法与密钥但是由于其算法复杂, 而使得加密解密速度没有对称加密解密的速度快。
🧑‍💻 非对称加密要用到两个密钥, 一个叫做 “公钥”, 一个叫做 “私钥”.

公钥和私钥是配对的. 最大的缺点就是运算速度非常慢, 比对称加密要慢很多.

通过公钥对明文加密, 变成密文
通过私钥对密文解密, 变成明文
也可以反着用

通过私钥对明文加密, 变成密文
通过公钥对密文解密, 变成明文
非对称加密的数学原理比较复杂, 涉及到一些 数论 相关的知识. 这里举一个简单的生活上的例子.

A 要给 B 一些重要的文件, 但是 B 可能不在. 于是 A 和 B 提前做出约定:

B 说: 我桌子上有个盒子, 然后我给你一把锁, 你把文件放盒子里用锁锁上, 然后我回头拿着钥匙来开锁取文件.

在这个场景中, 这把锁就相当于公钥, 钥匙就是私钥. 公钥给谁都行(不怕泄露), 但是私钥只有 B 自己持有. 持有私钥的人才能解密.

🦋 数据摘要 && 数据指纹
数字指纹(数据摘要) , 其基本原理是利用单向散列函数 (Hash 函数) 对信息进行运算,生成一串固定⻓度的数字摘要。 数字指纹并不是一种加密机制, 但可以用来判断数据有没有被篡改。
摘要常见算法: 有 MD5、 SHA1、 SHA256、 SHA512 等, 算法把无限的映射成有限, 因此可能会有碰撞(两个不同的信息, 算出的摘要相同, 但是概率非常低)
摘要特征: 和加密算法的区别是, 摘要严格意义不是加密, 因为没有解密, 只不过从摘要很难反推原信息, 通常用来进行数据对比。
🦋 数字签名
摘要经过加密, 就得到数字签名(后面细说)
🦋 理解链 - 承上启下
对 http 进行对称加密, 是否能解决数据通信安全的问题? 问题是什么?
为何要用非对称加密? 为何不全用非对称加密?
三:🔥 HTTPS 的工作过程探究
🧑‍💻 既然要保证数据安全, 就需要进行 “加密”.
🧑‍💻 网络传输中不再直接传输明文了, 而是加密之后的 “密文”.
🧑‍💻 加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密

🦋 方案 1 - 只使用对称加密
🧑‍💻 如果通信双方都各自持有同一个密钥 X, 且没有别人知道, 这两方的通信安全当然是可以被保证的(除非密钥被破解)

引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密,也就不知道请求的真实内容是啥了.

但事情没这么简单. 服务器同一时刻其实是给很多客户端提供服务的. 这么多客户端, 每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了, 黑客就也能拿到了).

因此服务器就需要维护每个客户端和每个密钥之间的关联关系, 这也是个很⿇烦的事情~

比较理想的做法, 就是能在客户端和服务器建⽴连接的时候, 双方协商确定这次的密钥是啥~

但是如果直接把密钥明文传输, 那么黑客也就能获得密钥了~~ 此时后续的加密操作就形同虚设了.

因此密钥的传输也必须加密传输!

但是要想对密钥进行对称加密, 就仍然需要先协商确定一个 “密钥的密钥”. 这就成了 “先有鸡还是先有蛋” 的问题了. 此时密钥的传输再用对称加密就行不通了。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。