当前位置: 首页 > news >正文

HTTP vs HTTPS

一、基础概念:从明文到加密的演进

HTTP(超文本传输协议) 作为Web的基石,定义了浏览器与服务器之间的通信规则。它采用明文传输模式,数据在传输过程中未经任何加密处理,如同在公共场合高声对话。这种设计使其默认端口为80,仅需完成TCP三次握手即可传输数据

HTTPS(安全超文本传输协议) 本质是“HTTP over SSL/TLS”,通过在HTTP与TCP层之间插入SSL/TLS加密层实现安全加固

  • 端到端加密:所有数据经TLS协议加密后传输
  • 身份认证:通过CA证书验证服务器真实性
  • 完整性保护:防止数据在传输中被篡改
  • 默认使用443端口,需先建立安全通道才能通信 

技术演进关键节点: 1994年网景公司发布SSLv2 → 1999年TLS 1.0取代SSL → 2018年TLS 1.3成为主流 → 至今全球HTTPS流量占比超95%(W3Techs数据)

二、核心差异深度剖析

1. 安全机制对比
安全维度HTTPHTTPS
传输方式明文传输 TLS/SSL加密 
数据防篡改无保护机制HMAC摘要算法验证
身份认证CA数字证书体系
典型攻击防范无法抵御中间人攻击可阻断窃听/篡改/伪造

三、协议实现关键差异点

1. 工作流程对比

HTTP通信流程

浏览器 → TCP三次握手(80端口) → 发送明文请求 → 接收明文响应 → 关闭连接

HTTPS握手过程

步骤交互内容技术作用
ClientHello协议版本+随机数+密码套件协商加密参数
ServerHello选定套件+随机数+证书身份认证
密钥交换ECDHE生成预主密钥前向保密保障
会话密钥HKDF生成加密密钥建立安全通道
应用数据传输AES-GCM对称加密高效加密传输
2. 证书体系解析

HTTPS必须部署SSL/TLS证书,分为三类:

证书类型验证深度适用场景浏览器标识
DV域名所有权个人博客锁形图标🔒
OV企业实名认证电商平台🔒+公司名称
EV严格法律审核银行/支付绿色地址栏

证书链示例: 服务器证书 → 中间CA → 根CA(预置在操作系统信任库)

四.SSL/TLS握手详解

TLS 第一次握手

首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求。在这一步,客户端主要向服务器发送以下信息:

  • (1)客户端支持的 TLS 协议版本,如 TLS 1.2 版本。
  • (2)客户端生产的随机数(Client Random),后面用于生成「会话秘钥」条件之一。
  • (3)客户端支持的密码套件列表,如 RSA 加密算法
TLS 第二次握手

服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello。服务器回应的内容有如下内容:

  • (1)确认 TLS 协议版本,如果浏览器不支持,则关闭加密通信。
  • (2)服务器生产的随机数(Server Random),也是后面用于生产「会话秘钥」条件之一。
  • (3)确认的密码套件列表,如 RSA 加密算法。(4)服务器的数字证书。
TLS 第三次握手

客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。

如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:

  • (1)一个随机数(pre-master key)。该随机数会被服务器公钥加密。
  • (2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。
  • (3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。

上面第一项的随机数是整个握手阶段的第三个随机数,会发给服务端,所以这个随机数客户端和服务端都是一样的。

服务器和客户端有了这三个随机数(Client Random、Server Random、pre-master key),接着就用双方协商的加密算法,各自生成本次通信的「会话秘钥」

TLS 第四次握手

服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。

然后,向客户端发送最后的信息:

  • (1)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。
  • (2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。

 

http://www.lryc.cn/news/590230.html

相关文章:

  • 【React Native】布局文件-顶部导航栏
  • 从零开始学习 Redux:React Native 项目中的状态管理
  • 3D TOF 安全防护传感器
  • Ubuntu 上 GBase 8s 实例重启与字符集踩坑实录
  • 在UE中如何给骨骼网格体赋予动画
  • conda activate 时报错: CondaError: Run ‘conda init‘ before ‘conda activate‘
  • React Native 在 Web 前端跨平台开发中的优势与实践
  • Django ORM 查询工具对象详解
  • 基于WebRTC技术实现一个在线课堂系统
  • 线上分享:解码eVTOL安全基因,构建安全飞行生态
  • 主机安全---开源wazuh安装
  • 前端面试题(React 与 Vue)
  • Elasticsearch+Logstash+Filebeat+Kibana部署
  • [时序数据库-iotdb]时序数据库iotdb的安装部署
  • C++11 std::uninitialized_copy_n 原理与实现
  • 边缘计算革命:AWS Snowcone在智慧工厂的落地实践(2025工业4.0实战指南)
  • Jenkins+Docker(docker-compose、Dockerfile)+Gitee实现自动化部署
  • 【时序数据库-iotdb】时序数据库iotdb的可视化客户端安装部署--dbeaver
  • Datawhale AI夏令营笔记-TF-IDF方法
  • 玩转Docker | 使用Docker部署vnStat网络流量监控服务
  • java之-文件预览终极解决方案
  • java工具类Hutool
  • 深度剖析C++生态系统:一门老牌语言如何在开源浪潮中焕发新生?
  • [Java安全】JDK 动态代理
  • 浅谈SQL注入注释符#和--+的运用场景和区别
  • rocky8 --Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】
  • Hadoop(三)
  • Django REST Framework 入门指南:从 0 到 1 实现 RESTful API
  • 汇编 Call 指令运行原理详解:从跳转机制到堆栈操作
  • 基于 elements3 包装的 可展开 table 组件