【JavaEE】HTTPS协议(对称加密、非对称加密、中间人攻击、证书)

一、什么是HTTPS?

1.1 什么是HTTPS?

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

1.2 为什么引入HTTPS?

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

比如臭名昭著的 "运营商劫持"

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

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

1.3 什么是加密?

加密就是把 明文 (要传输的信息)进行一系列变换, 生成 密文
解密就是把 密文 再进行一系列变换, 还原成 明文

在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密钥

既然要保证数据安全, 就需要进行 "加密".

网络传输中不再直接传输明文了, 而是加密之后的 "密文".

加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密

1.4 对称加密

1.5 非对称加密

二、HTTPS的工作过程

2.1 使用对称加密


🚑问题:客户端生成的密钥key要发给服务器,服务器才能解密,如果被黑客截获了key,黑客就成功入侵并可以篡改数据

如何让密钥key无法被黑客获取?

2.2 使用非对称加密

客户端生成一个对称私钥key,服务器生成一个公钥pub和一个私钥pri

  • 客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器
  • 客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器由于中间的网络设备没有私钥, 即使截获了数据, 也无法还原出内部的原文, 也就无法获取到对称密钥
  • 服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响应数据
  • 后续客户端和服务器的通信都只用对称加密即可. 由于该密钥只有客户端和服务器两个主机知道, 其他主机/设备不知道密钥即使截获数据也没有意义

🚑问题:有可能客户端最开始获取的公钥是黑客截获后伪造的!

2.3 中间人攻击

黑客伪造公钥

🚑问题:防护中间人攻击的最关键问题就是客户端如何信任公钥?

2.4 证书

在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书 .
这个证书包含了刚才的公钥, 也包含了网站的身份信息

证书可以理解成是一个结构化的字符串, 里面包含了以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名

    客户端 获取到这个证书之后, 会对证书进行校验
  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
  • 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等.如果相等, 则说明证书是没有被篡改过的.

特别注意:这里共涉及五把锁

相关推荐
小bo波2 小时前
Java Swing 图形用户界面实验 —— 从算术练习到游戏开发的完整实践
java·课程设计·gui·游戏开发·扫雷·swing
咖啡八杯3 小时前
GoF设计模式——备忘录模式
java·后端·spring·设计模式
SamDeepThinking13 小时前
裁掉那个差程序员后,给你看团队里高手的代码:这个习惯,希望你有
java·后端·程序员
朕瞧着你甚好14 小时前
技术雷达 & Java 集成评估报告 — Apache Tika 3.3.1
java·ai编程
MacroZheng15 小时前
短短几天,暴涨2.8万Star!又一款编程神器开源!
java·人工智能·后端
SamDeepThinking15 小时前
函数式编程:用BiFunction消除多类型分支的代码重复
java·后端·面试
Flittly1 天前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
小兔崽子去哪了1 天前
Java 生成二维码解决方案
java·后端
牛奶1 天前
HTTPS你不知道的事
前端·https·浏览器
人活一口气2 天前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot