http协议和https协议的区别
12

因为老是忘记https协议为什么这么安全,就写下这篇文章以此用来记录。

HTTP协议基础

定义与概述

HTTP(Hypertext Transfer Protocol,超文本传输协议)是互联网上应用最广泛的一种网络协议,主要用于客户端(如浏览器)和服务器之间的通信。它是Web数据交换的基础,支持网页浏览、API调用等场景。

工作原理

HTTP协议是一个应用层协议,基于TCP/IP协议(默认端口80/HTTP,443/HTTPS),其工作流程可分为以下几个关键阶段:

  1. ​连接建立​

    • 客户端通过TCP三次握手与服务器建立连接

    • HTTPS在此基础上还需要完成TLS握手加密过程

  2. ​请求发送​

    • 客户端构造并发送HTTP请求报文,包含:

      • ​请求行​​:方法(GET/POST等)、目标URL、协议版本(如HTTP/1.1)

      • ​请求头​​:附加元数据(如User-Agent、Content-Type)

      • ​请求体​​(可选):如POST方法提交的表单数据

    示例请求:

    GET /index.html HTTP/1.1
    Host: www.example.com
    User-Agent: Mozilla/5.0
  3. ​服务器处理​

    • 服务器解析请求,执行相应操作(如读取资源、调用API)。

  4. 响应返回​

    • 服务器返回结构化响应报文,包含:

      • ​状态行​​:状态码(如200 OK、404 Not Found)

      • ​响应头​​:元数据(如Content-Type、Set-Cookie)

      • ​响应体​​:实际数据内容(HTML、JSON等)

    ​示例响应:​

    HTTP/1.1 200 OK
    Content-Type: text/html
    Content-Length: 1234
    
    <html>...</html>
  5. ​连接管理​

    • HTTP/1.1默认保持连接复用(避免重复握手)

    • HTTP/2支持多路复用,进一步提升效率

常见请求方法和状态码分类:

请求方法:

方法

用途

GET

获取资源(无请求体)

POST

提交数据(有请求体)

PUT

更新资源

DELETE

删除资源

HEAD

获取响应头(无响应体)

状态码分类:

状态码

含义

2xx

成功(如200 OK)

3xx

重定向(如301永久跳转)

4xx

客户端错误(如404)

5xx

服务器错误(如500)

TCP的三次握手与四次挥手

补充一下TCP的三次握手与四次挥手

所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。

三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。

  • 第一次握手(SYN=1, seq=x):

    客户端发送一个 TCP 的 SYN 标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(Sequence Number)字段里。

    发送完毕后,客户端进入 SYN_SEND 状态。

  • 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):

    服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。 发送完毕后,服务器端进入 SYN_RCVD 状态。

  • 第三次握手(ACK=1,ACKnum=y+1)

    客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1

    发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 握手结束。

三次握手的过程的示意图如下:

TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),也叫做改进的三次握手。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close() 操作即可产生挥手操作。

  • 第一次挥手(FIN=1,seq=x)

    假设客户端想要关闭连接,客户端发送一个 FIN 标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。

    发送完毕后,客户端进入 FIN_WAIT_1 状态。

  • 第二次挥手(ACK=1,ACKnum=x+1)

    服务器端确认客户端的 FIN 包,发送一个确认包,表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。

    发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态,等待服务器端关闭连接。

  • 第三次挥手(FIN=1,seq=y)

    服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN 置为1。

    发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK。

  • 第四次挥手(ACK=1,ACKnum=y+1)

    客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT状态,等待可能出现的要求重传的 ACK 包。

    服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。

    客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。

四次挥手的示意图如下:

four-way-handshake

HTTPS协议

安全基础:TLS协议

HTTPS协议的安全核心在于其内嵌的​​TLS(Transport Layer Security)​​协议。TLS在客户端与服务器之间建立了一条​​加密、认证且保证数据完整性​​的安全通道,从而全面保护HTTP通信。简而言之:

HTTPS = HTTP + SSL/TLS

SSL/TLS发展历程

  • ​SSL(Secure Sockets Layer)​

    • 由网景公司(Netscape)于1990年代开发

    • 早期版本(如SSL 3.0)因安全漏洞已被全面弃用

  • ​TLS(Transport Layer Security)​

    • 作为SSL的标准化升级版本,由IETF组织维护

    • 最新版本TLS 1.3(2018年发布)在安全性和效率上有显著提升

技术注释:斜杠"/"表示两者属于同一技术谱系,TLS是SSL的演进版本

协议分层模型

OSI七层模型 vs TCP/IP四层模型

​​OSI七层模型​​

​​实际实现方式(以TCP/IP为例)​​

​7. 应用层​

HTTP、FTP、SMTP、DNS等协议

​6. 表示层​

由应用层协议(如SSL/TLS)或数据格式(JSON/XML)实现

​5. 会话层​

由TCP/IP的Socket或应用层协议(如RPC)管理

​4. 传输层​

TCP(可靠传输)、UDP(不可靠传输)

​3. 网络层​

IP协议(IPv4/IPv6)、路由器、ICMP

​2. 数据链路层​

以太网(Ethernet)、Wi-Fi(802.11)、交换机

​1. 物理层​

双绞线、光纤、无线信号、网卡(NIC)

TLS协议如果归类其中一层的话,那么它属于表示层里面,加密数据的这一层。

但是这是理论上的分层,实际互联网发展过程中,并没有分成这么细,而是将上三层,应用层、表示层、会话层合并成了一层成为了应用层,然后数据链路层和物理层合并成了网络接口层,这就发展成为了TCP/IP四层模型,这也是互联网的真实标准,说明了理论和实际上的差距。

想象很丰满,现实很骨感😂。

​​OSI七层​​

​​TCP/IP四层​​

​​实际实现方式​​

应用层、表示层、会话层

应用层

HTTP、FTP、SMTP(内置会话/格式管理)

传输层

传输层

TCP、UDP、QUIC

网络层

网络层

IP(IPv4/IPv6)

数据链路层、物理层

网络接口层

Ethernet、Wi-Fi、光纤

​关键区别​​:

  • ​OSI模型​​:理论严谨,适合教学。

  • ​TCP/IP模型​​:实用主义,互联网的真实标准。

实践建议:学习时理解OSI分层思想,实践中聚焦TCP/IP模型+应用层协议

TLS握手流程详解

说完了OSI模型,那么我们继续来说TLS协议。TLS 在 HTTPS 中如何发挥安全作用的呢?当客户端(如浏览器)​​首次访问​​一个 HTTPS 网站时,会完整执行 TLS 握手流程​:

1.当客户端首次访问HTTPS网站时,完整的TLS握手包含以下关键步骤:

  1. ​协议协商​

    • 客户端与服务器确认支持的最高TLS版本

    • 共同选定最优加密套件(Cipher Suite),指定:

      • 密钥交换算法(如ECDHE)

      • 对称加密算法(如AES-256-GCM)

      • 消息认证算法(如SHA-384)

  2. ​身份验证​

    • 服务器发送数字证书链

    • 客户端验证:

      • 证书签名有效性

      • 有效期检查

      • 域名匹配验证

      • 吊销状态检查

  3. ​密钥交换​

    • 通过非对称加密安全协商出预主密钥

    • 典型方式:

      • RSA密钥传输(TLS 1.3已不推荐)

      • ECDHE密钥交换(前向安全)

  4. ​会话密钥生成​

    • 基于预主密钥生成主密钥(Master Secret)

    • 派生实际加密使用的会话密钥

  5. ​握手验证​

    • 交换并验证Finished消息

    • 确认握手过程完整且未被篡改

​会话复用优化​​:

  • 服务器生成唯一Session ID并缓存密钥材料

  • 后续连接可跳过完整验证流程,直接复用会话

三大安全支柱

HTTPS的安全性建立在TLS协议的三大核心机制上:

  1. ​数据加密(Confidentiality)​

    • ​实现方式​​:

      • 握手后使用对称加密(如AES)保护应用层数据

      • 非对称加密(如RSA)仅用于安全交换对称密钥

    • ​安全效果​​:即使通信被截获,攻击者也无法解密内容

  2. ​身份认证(Authentication)​

    • ​数字证书机制​​:

      • 包含服务器公钥和身份信息

      • 由受信任CA机构签发并签名

    • ​验证流程​​:

      • 客户端验证证书链签名

      • 检查域名匹配和有效期

      • 确认颁发CA在可信列表中

  3. ​数据完整性(Integrity)​

    • ​实现技术​​:

      • HMAC消息认证码

      • 加密哈希校验

    • ​保护效果​​:确保传输数据未被篡改

安全标识解析

当浏览器地址栏显示"https://"和挂锁图标时,表示:

  1. 服务器身份已通过权威CA验证

  2. 所有通信数据均被高强度加密

  3. 传输过程具备防篡改保护

这种端到端的安全保障使得HTTPS成为现代互联网隐私保护的基石。

技术演进提示:随着TLS 1.3的普及,握手过程已优化为1-RTT甚至0-RTT,在保持安全性的同时显著提升性能

http协议和https协议的区别
https://www.orioncoder.cn/archives/byAgDS42
作者
Orion
发布于
更新于
许可