[Java EE] 网络原理(3) https

HTTPS是HTTP的安全增强版本,通过SSL/TLS加密层实现数据传输的机密性、完整性和身份验证。与HTTP明文传输不同,HTTPS采用加密传输,默认使用443端口,并需要CA机构颁发的数字证书。HTTPS结合对称加密(高效)和非对称加密(安全)机制,通过数字证书防止中间人攻击。证书包含服务器公钥、域名和CA签名,客户端通过校验证书有效性和完整性确保通信安全。密钥协商后,后续数据传输使用对称加密,兼顾安全性与效率

1.HTTPS

HTTPS(Hypertext Trantsfer protocol Secure 超文本传输协议) 是 HTTP 的安全增强版本 , 核心在于 HTTP 与 TCP 之间加入 SSL/TLS 加密层 , 解决 HTTP 明文传输的安全隐患 , 是目前互联网安全通信的主流协议

本质 : HTTPS = HTTP + SSL/TLS (加密封装 , 并非独立协议 , 而是对 HTTP 的安全升级)

核心目标 : 保证数据传输的 [机密性,完整性,身份验证] , 防止窃听,篡改 , 中间人攻击(运行商劫持 , 黑客伪造服务器)

2.HTTPS 与 HTTP 的差异

|----------|----------------|---------------------------|
| 特性 | HTTP | HTTPS |
| 传输方式 | 明文传输 | 加密传输 |
| 安全保障 | 无,易被劫持、篡改 | 有,通过加密和认证机制防护 |
| 底层依赖 | 仅依赖 TCP 协议 | TCP 协议 + 加密层(TLS/SSL) |
| 端口 | 默认 80 端口 | 默认 443 端口 |
| 证书要求 | | 需 CA 机构颁发的数字证书 |

3.HTTPS 加密机制

① 对称加密 (共享单密钥)

  • 原理 : 使用同一个密钥完成明文加密和密文解密 , 运行速度快 , 效率高
  • 应用场景 : 客户端与服务端协商确定密钥后 , 后续所有数据传输均通过该密钥加密

详细步骤 :

  1. A 和 B 之间通过安全渠道 , 约定对称密钥 K , 双方需妥善保管
  2. A 使用 加密算法 和 密钥 K , 将明文 M 加密为密文 C ; 并将密文 C 通过网络发送给 B
  3. B 接收密文 C 后 , 使用同一密钥 K 和 解密算法 , 将密文还原为明文 M
  • 问题 : 密钥需要在双方首次通信时协商 , 若直接明文传输 , 容易被黑客窃取 , 导致加密失效 ; 并且要脱离网络传输 , 否则密钥会被第三方捕获 (密钥分发风险)

② 非对称加密 (公钥+私钥配对)

原理 : 使用 [ 公钥-私钥 ] 配对 , 公钥公开,私钥保密;公钥加密的内容仅私钥可解,私钥签名的内容仅公钥可验

应用场景 : 仅用于对称密钥的协商传输

问题 : 运行速度较慢

核心作用 : 客户端生成对称密钥后 , 用服务器公钥加密该密钥 , 服务器通过私钥解密获取 , 确保密钥传输过程不被窃取

详细步骤 :

  1. B 通过算法生成一对密钥 : 公钥(Pub_B) 和 私钥(Pri_B) ; 并且 B 将Pub_B 公开(如上传到密钥服务器或邮件发送) , Pri_B 严格保密
  2. A 获取 B 的 Pub_B , 用其对明文 M 加密为密文 C ; 并将密文 C 通过网络发送给 B
  3. B 接收密文 C 之后 , 用 Pri_B 解密 , 还原为明文 C

③ 中间人攻击

上述流程都存在着大量的安全隐患 , 比如中间人攻击 ; 中间人攻击是 HTTPS 需抵御的核心威胁

对称加密场景下的中间人攻击 :

  1. AB 未通过安全渠道共享密钥 , 选择在公开网络传输对称密钥 K
  2. 攻击者 M 在信道中拦截 A 发送给 B的密钥 K ; 并且围在一个虚假的密钥 K` , 将 K` 发送给 B 同时保留真实的密钥 K
  3. A 以为已经将 K 传给了 B , 实际 B 收到的是 K` ; 但 AK 加密明文发送给 B 时 , 攻击者拦截密文 , 用 K 解密获取密文 , 再用 K` 加密后发送给 B ; B 用 **K`**解密 , 以为通信正常 , 实则所有内容已经被攻击者窃取了
  • 最终结果 : 通信双方的密钥被截获 , 所有明文数据都能被攻击者解密篡改 , 对称加密完全失效

对称加密场景下的中间人攻击 :

  1. B 将公钥 Pub_B 发布到未认证的公钥服务器上 , 未对其进行数字签名
  2. 攻击者 M 拦截 B 发布的真实公钥 Pub_B , 阻止其上传到公钥服务器 ; 并且攻击者生成自己的密钥对 ( Pub_M, Pri_M ) , 将 Pub_M 伪装成 B 的公钥上传的公钥服务器
  3. A 从公钥服务器获取到 "虚假的 B 的公钥"(实际上是 M 伪造的) , 用 Pub_M 加密明文传输给 B ; 攻击者拦截密文 , 用自己的私钥 Pri_M 解密获取明文 , 再用 B 的真实公钥 Pub_B 加密后发送给 B ; B 用自己的私钥 Pri_B 解密 , 以为通信正常 , 实则明文已经被攻击者窃取
  • 最终结果 : 发送方用伪造的公钥解密 , 攻击者可解析所有内容 , 非对称加密的安全性被突破

④ 数字证书

数字证书是防御中间人攻击的关键

核心逻辑 :

  1. 证书包含服务器真实公钥 , 域名 , CA 签名等信息 , 中间人无法伪造合法证书
  2. 客户端校验证书时 , 会通过一下两点识别伪造/篡改的证书 :

证书完整性校验 : CA 用私钥对证书明文哈希后的照耀加密形成签名 , 客户端用 CA 公钥解密签名得到摘要 hash1 , 再计算证书明文摘要 hash2 , 若不一致则证书被篡改

身份信息校验 : 证书包含服务器域名等身份信息 , 中间人替换证书后 , 域名信息与客户端请求的域名不匹配 , 客户端会判定证书无效

  1. 中间人无法生成由受信任 CA 签名的假签名 , 因此无法通过客户端的证书校验 , 攻击失败

数字证书内容

包含证书颁发机构 , 有效期 , 公钥 , 证书所有者(域名等) , 数字签名等信息 , 无私钥

数字签名

数字签名的生成(左侧 "签名" 流程)
  1. 生成摘要 : 对需要签名的数据 (如服务器证书的明文信息) , 通过散列函数 (如 MD5、SHA) 计算出唯一的 "散列值" (固定长度的二进制串)
  2. 加密摘要 : 用签名者 (如 CA 机构) 的私钥对该散列值进行加密,得到 "数字签名"
  3. 组合证书 : 将原始数据与加密后的数字签名绑定 , 形成 "带数字签名的数据" (即服务器最终获得的数字证书)
数字签名的验证(右侧 "验证" 流程)
  1. 分离数据与签名 : 从接收到的 "带数字签名的数据"中 , 拆分出原始数据和数字签名
  2. 双重计算散列值 :
    1. 对原始数据重新计算散列值 , 得到 "新散列值"
    2. 用签名者的公钥解密数字签名 , 得到 "原始散列值"
  3. 比对验证 : 若 "新散列值" 与 "原始散列值" 完全一致 , 说明数据未被篡改,签名合法

通过证书解决中间人攻击(HTTPS 完整流程) :

  1. 建立连接与证书传输 : 客户端向服务器发起 HTTPS 连接请求 , 服务器返回包含自身公钥,域名,有效期,CA 签名等信息的数字证书
  2. 证书校验 : 客户端接收证书后 , 需要完成三次校验 : ① 校验证书有效期是否过期 ; ② 校验证书颁发机构是否为受信任的 CA 机构 ; ③ 校验证书完整性
  3. 密钥协商 : 证书校验通过后 , 客户端生成随机对称密钥 , 用证书中的服务器公钥加密该密钥 , 发送给服务器
  4. 加密通信: 服务器用自身私钥解密客户端发送的加密数据 , 获取对称密钥 ; 后续客户端与服务器的所有数据传输 , 均通过该对称密钥解密 , 保证传输效率
相关推荐
天呐草莓2 小时前
企业微信运维手册
java·运维·网络·python·微信小程序·企业微信·微信开放平台
huangql5202 小时前
HTTP超文本传输协议:互联网的统一语言
网络·网络协议·http
小疆智控2 小时前
低延迟高同步!Profinet转EtherCAT,蒸汽转化装置技术突破新标杆
网络·网络协议
电商API_180079052472 小时前
进阶篇:电商商品评论情感分析 + 关键词挖掘(Python NLP 实战)
大数据·开发语言·网络·数据库·人工智能
宇钶宇夕2 小时前
跨协议冗余通信方案落地:EPN-330网关打通西门子S7-1517H与编码器的控制链路
运维·网络·自动化
三七吃山漆2 小时前
攻防世界——ics-05
网络·安全·web安全·ctf
胖咕噜的稞达鸭2 小时前
【C语言进阶】死磕指针:从内存原理到指针数组的深度解析
c语言·开发语言·网络
_F_y2 小时前
应用层协议HTTP
网络·网络协议·http
lkbhua莱克瓦243 小时前
TCP通信练习1——多发多收
java·开发语言·网络·网络协议·tcp/ip·tcp练习