浅析HTTP与HTTPS的区别

HTTP协议

超文本传输协议HTTP(Hypertext Transfer Protocol)是一个用于在客户端(通常是浏览器)和服务器之间传输数据的协议。它是Web通信的基础协议,主要用于在客户端和服务器之间交换各种资源(如HTML文件、图片、视频等)。

HTTP协议的局限性

1、明文传输

  • HTTP使用明文传输数据,任何中间人都可以轻易截获并查看通信内容
  • 无法保护敏感信息(如密码,银行卡号等)

2、无法验证通信方的身份

  • HTTP协议无法确认通信对方是否是可信的服务器,容易遭受黑客的攻击

3、无法保证数据的安全性

  • HTTP协议无法检测数据是否被篡改

HTTPS协议

HTTPS协议就是在HTTP协议的基础上添加了TLS/SSL协议,来对数据进行加密,保证数据的机密性和完整性。

二者的区别

1、数据传输的安全性:HTTP数据使用明文传输,容易被监听和篡改。HTTPS通过TLS和SSL协议对数据进行加密传输,保证了数据的机密性和完整性。

主要手段包括:在建立连接时使用非对称加密,在家里连接以后使用对称加密,通过服务器证书来确认服务器的身份

2、默认端口号不同:HTTP协议使用80端口,HTTP协议使用443端口

3、性能:HTTP无需加密,建立连接速度更快,HTTPS需要加上TLS协议进行加密传输,增加了计算开销,但是差距很小。

4、加密方式:HTTP无加密机制,HTTPS使用混合加密的方式 (对称加密(建立连接前)+非对称加密(建立连接时))

HTTPS建立连接过程

HTTPS协议分为HTTP+TLS两个过程:

1、HTTP:负责数据的传输

2、TLS/SSL:负责加密、身份认证和数据完整性校验

TLS 和 SSL协议的基本流程:

1、客户端向服务器索要并且验证服务器的公钥

2、双方生成 会话秘钥

3、使用 会话秘钥 进行加密通信

TLS 四次握手的流程:

1、客户端向服务器发起加密通话请求,并且包含以下信息:

  • 客户端支持的 TLS 版本
  • 客户端支持的 加密算法列表
  • 客户端生成的 随机数(作为会话秘钥之一)

2、服务器收到客户端请求后,回复请求,包含以下信息:

  • 确认通信的 TLS 版本
  • 确定通信使用的 加密算法
  • 客户端生成 随机数(作为会话秘钥之一)
  • 将服务器的 公钥 发送给客户端, 客户端根据公钥来确认服务器的身份

3、客户端验证证书的真实性,并且回复服务器,包括以下信息:

  • 客户端向浏览器中的CA来验证服务器数字证书的真实性,如果真是就进行以下操作
  • 取出服务器的公钥,并使用公钥加密报文进行回复
  • 生成 第三个随机数(作为会话密钥之一)
  • 通知服务器使用会话密钥进行加密

4、服务器对客户端进行确认,并使用会话密钥进行通信,包括以下信息:

  • 通知客户端,后续通信使用会话密钥进行加密(密钥为三个随机数)
  • 通知客户端 TLS 握手结束

注意:在握手后的通信中,服务器和客户端使用协商好的加密算法和会话密钥进行加密传输,通过对称加密的方式进行传输,只有在TLS握手时,使用非对称加密的方式进行通信,这么做的目的是为了防止被中间人监听。

重点分析

1、TLS 使用四次握手的方式来保证 HTTP 协议的安全性

2、使用非对称加密的方式来交换会话密钥,来防止会话密钥被中间人监听和截获

3、采用3次随机数作为会话密钥

4、使用对称加密的方式进行通信,来提高通信的性能

5、采用数字证书来保证客户端的真实性,避免中间人伪造成服务器

相关推荐
bing_1584 分钟前
Spring Boot 中 MongoDB @DBRef注解适用什么场景?
spring boot·后端·mongodb
RedJACK~2 小时前
Go语言Stdio传输MCP Server示例【Cline、Roo Code】
开发语言·后端·golang
bing_1583 小时前
Spring Boot 中如何启用 MongoDB 事务
spring boot·后端·mongodb
小屁孩大帅-杨一凡4 小时前
Azure Document Intelligence
后端·python·microsoft·flask·azure
Code哈哈笑5 小时前
【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解
java·前端·数据库·spring boot·后端
无名之逆5 小时前
Hyperlane: Unleash the Power of Rust for High-Performance Web Services
java·开发语言·前端·后端·http·rust·web
薯条不要番茄酱6 小时前
【SpringBoot】从环境准备到创建SpringBoot项目的全面解析.
java·spring boot·后端
caihuayuan513 小时前
升级element-ui步骤
java·大数据·spring boot·后端·课程设计
Kookoos14 小时前
ABP vNext + EF Core 实战性能调优指南
数据库·后端·c#·.net·.netcore
揣晓丹15 小时前
JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码
java·vue.js·spring boot·后端·开源