计算机网络-http协议和https的加密原理
HTTP(HyperText Transfer Protocol,超文本传输协议)是用于在万维网(World Wide Web)上传输超文本的基础协议。它定义了客户端(通常是浏览器)和服务器之间的文本数据传输格式和规则。以下是HTTP的详细介绍:
HTTP协议和加密原理
- 应用场景:
- HTTP
- HTTP请求报文
- 请求行
- 请求头部:
- 请求主体:
- HTTP响应报文
- 1. 状态行 (Status Line)
- 2. 响应头部 (Response Headers)
- 3. 响应主体 (Response Body)
- HTTPS
- HTTPS与HTTP的区别
- 加密方式
- 数据摘要
- CA证书
- https通信的完整流程
- 反思
应用场景:
HTTP协议广泛应用于网页浏览、API通信、文件下载等场景。它的简单性和扩展性使其成为互联网数据传输的基础。
总结起来,HTTP作为应用层协议,通过定义客户端和服务器之间的通信规则,支持了现代互联网的许多关键功能。
HTTP报文格式包括请求报文和响应报文两种。每种报文由三部分组成:起始行、头部和主体。下面是详细介绍:
HTTP
-
客户端和服务器:
- 客户端:发起请求的一方,通常是浏览器。
- 服务器:处理请求并返回响应的一方,通常是Web服务器。
-
资源:
- HTTP用于请求和传输资源,这些资源可以是HTML文档、图片、视频、脚本文件等。
HTTP请求报文
HTTP报文包括请求报文和响应报文。
请求行
包括HTTP方法、请求的资源路径和HTTP版本。例如:GET /index.html HTTP/1.1
请求方法:1. GET: 请求指定的资源。通常用于获取数据,且不会对服务器上的资源产生副作用。2. POST:向服务器提交数据,通常用于表单提交、文件上传等操作。3. PUT: 向服务器上传文件或资源,可以用来创建或更新资源。4. DELETE:请求服务器删除指定的资源。5. HEAD:类似于GET请求,但只返回响应的头部,不返回实际内容。用于检查资源的元数据。6. OPTIONS:请求服务器返回支持的HTTP方法。用于查询服务器的能力。7. PATCH: 用于对资源进行部分修改。
请求头部:
包括各种请求头字段,如Host
、User-Agent
、Accept
等。
HTTP请求报文示例:
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
常见请求头字段
- Host:请求的主机名和端口。
- User-Agent:客户端软件的信息。
- Accept:客户端可处理的媒体类型。
- Accept-Encoding:客户端可处理的内容编码。
- Cookie:客户端存储的Cookie数据。
- Content-Type:请求主体的媒体类型。
- Content-Length:请求主体的长度。
请求主体:
可选,用于POST或PUT请求传输数据。一般是提交的表单数据等。GET请求通常没有主体。
请求报文示例:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
HTTP响应报文
1. 状态行 (Status Line)
状态行包含HTTP版本、状态码和状态描述。格式如下:
<HTTP版本> <状态码> <状态描述>
例如:HTTP/1.1 200 OK
HTTP状态码
服务器在响应中返回的状态码,用于表示请求的处理结果。常见状态码有:
- 2xx 成功:
- 200 OK:请求成功。
- 201 Created:请求成功并创建了新的资源。
- 3xx 重定向:
- 301 Moved Permanently:资源永久移动到新位置。
- 302 Found:资源暂时移动到新位置。
- 4xx 客户端错误:
- 400 Bad Request:请求有误,服务器无法处理。
- 401 Unauthorized:未授权,需要身份验证。
- 403 Forbidden:服务器拒绝请求。
- 404 Not Found:请求的资源不存在。
- 5xx 服务器错误:
- 500 Internal Server Error:服务器内部错误。
- 503 Service Unavailable:服务器暂时无法处理请求。
2. 响应头部 (Response Headers)
响应头部由多个头字段组成,每个字段包含一个名称和值,用冒号分隔。头部字段提供了关于服务器和返回资源的信息。格式如下:
<头字段名>: <字段值>
例如:
Content-Type: text/html
Content-Length: 1234
Set-Cookie: sessionId=abc123
- Date:响应生成的日期和时间。
- Content-Type:响应主体的媒体类型。
- Content-Length:响应主体的长度。
- Set-Cookie:设置Cookie信息。
- Cache-Control:缓存策略。
3. 响应主体 (Response Body)
响应主体包含实际返回的数据,如HTML文档、图片、JSON数据等。
HTTP响应报文示例
HTTP/1.1 200 OK
Date: Tue, 30 Jul 2024 12:34:56 GMT
Content-Type: text/html
Content-Length: 1234<!DOCTYPE html>
<html>
<head><title>Example</title>
</head>
<body><h1>Hello, World!</h1>
</body>
</html>
HTTPS
使用http协议在网络上传输是明文传输,没有丝毫的安全性,容易被人窃取重要数据从而造成隐式泄露和经济损失,所以需要对http的文本数据进行加密处理,https就是http协议加密版本。了解https的加密原理,需要先把下面几个概念搞清楚。以下是关于HTTPS的详细介绍:
HTTPS与HTTP的区别
安全性:
HTTPS使用SSL/TLS协议加密数据,提供安全通信。
HTTP以明文传输数据,易受攻击。
端口:
HTTPS通常使用TCP端口443。
HTTP通常使用TCP端口80。
性能:
HTTPS的加密和解密过程可能导致性能开销。
现代协议和硬件加速技术(如HTTP/2、TLS 1.3)大大减少了开销。
加密方式
对称加密:
对称加密就是加密和解密都会使用同一个密钥,例如:
加密:
明文:1234,密钥:8888 加密方式:使用密钥异或(^)明文,得到的就是加密后的数据,然后在异或就能得到原来的数据0000 0100 1101 0010 (明文:1234的二进制数据)
0010 0010 1011 1000 (密钥:8888的二进制数据)
0010 0110 0110 1010 (密文:加密后的数据,使用异或的规则,相同为0,相异为1,十进制数据是9834)
解密:
密文:9834,密钥:8888 解密方式:使用密钥异或(^)密文,得到的就是解密后的数据。0010 0110 0110 1010 (密文:十进制数据是9834)
0010 0010 1011 1000 (密钥:8888的二进制数据)
0000 0100 1101 0010 (明文:异或之后得到了原来的明文:1234)
对称加密特点
• 采⽤单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的
• 常⻅对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等
• 特点:算法公开、计算量⼩、加密速度快、加密效率⾼
非对称加密:
- 非对称加密就是有两把密钥,分为公钥和私钥,一把用来加密,一把用来解密,可以用公钥加密,私钥解密,反过来也可以。
- 常⻅⾮对称加密算法(了解):RSA,DSA,ECDSA
- 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对称加密解密的速度快。
数据摘要
数据摘要(Data Digest),又称为消息摘要(Message Digest)或哈希值(Hash Value),是一种通过哈希函数将任意长度的数据输入转换为固定长度的输出的技术。数据摘要用于验证数据的完整性,提供快速的内容识别,以及作为密码学中的重要组成部分。以下是数据摘要的详细介绍:
数据摘要的特性
-
固定长度输出:
- 不论输入数据的大小如何,哈希函数始终产生固定长度的输出。例如,SHA-256算法总是生成256位(32字节)的摘要。
-
单向性:
- 计算数据摘要是单向操作,即很难从摘要逆推出原始数据。这确保了摘要的安全性。
-
抗碰撞性:
- 很难找到两组不同的数据拥有相同的摘要。这意味着哈希函数能有效区分不同的数据输入。
-
敏感性:
- 对输入数据的微小改变(如改变一个字符)会导致输出摘要的显著变化。这种特性称为雪崩效应。
常见的哈希算法
-
MD5(Message-Digest Algorithm 5):
- 生成128位(16字节)的摘要。
- 由于其抗碰撞性较弱,现已不推荐用于安全应用。
-
SHA-1(Secure Hash Algorithm 1):
- 生成160位(20字节)的摘要。
- 目前也被认为不够安全,已被更强的算法取代。
-
SHA-256:
- 属于SHA-2系列,生成256位(32字节)的摘要。
- 提供更高的安全性,广泛用于数字签名和证书。
-
SHA-512:
- 属于SHA-2系列,生成512位(64字节)的摘要。
- 适用于需要更高安全性和处理能力的应用场景。
数据摘要的应用:
-
数据完整性验证:
- 在数据传输过程中,通过计算和比较数据摘要来验证数据是否被篡改。
- 例如,在文件下载过程中,提供文件的哈希值供下载者验证。
-
数字签名:
- 数字签名算法通过对数据摘要进行加密来验证数据的来源和完整性。
- 应用于电子邮件签名、软件发布、金融交易等场景。
-
密码存储:
- 用户密码存储时通常会先生成哈希值,而不是存储明文密码。
- 结合盐值(salt)进一步提高安全性,防止彩虹表攻击。
-
快速查找和去重:
- 利用数据摘要快速识别和查找重复数据,提升存储和检索效率。
- 在去重文件存储系统中应用广泛。
-
区块链:
- 在区块链中,区块的哈希值用于链接区块并确保链的完整性。
注意事项:
- 抗碰撞性:选择适合的哈希算法以保证安全性,避免使用已知存在漏洞的算法。
- 速度与安全性:哈希函数的性能和安全性需要平衡,高安全性的函数可能更慢。
- 盐值(Salt):在密码存储中使用盐值提高安全性,防止哈希碰撞攻击。
数据摘要是信息安全中的重要工具,在保障数据完整性、验证数据来源及提高存储效率等方面发挥着关键作用。选择合适的哈希算法和策略对于确保应用的安全性至关重要。
CA证书
服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端公钥的权威性。
如果你访问一个安全的网站,你的浏览器会检查该网站的证书是否由一个可信的CA机构颁发,并且该证书是否有效(未过期、未被撤销等)。如果一切正常,浏览器就会建立一个安全连接,保证你的通信不会被第三方窃取或篡改。
一个CA证书通常包含以下信息:
- 证书版本:证书的版本信息。
- 序列号:证书的唯一标识。
- 签名算法:用于签发证书的算法(如SHA-256)。
- 发行者信息:签发证书的CA的信息。
- 有效期:证书的生效日期和到期日期。
- 主体信息:证书所有者的信息(如域名、组织名)。
- 主体公钥信息:与证书绑定的公钥。
- 扩展信息:其他附加信息,如用途限制。
- 签名:CA对证书内容的数字签名,用于验证证书的真实性。
验证一个CA证书是否合法的方法: 计算CA证书信息的hash值未hash1,用CA证书给的公钥解密CA证书给的hash值为hash2,对比hash1和hash2是否相等,如果相等证书为真,如果不相等证书未假,如果有人想篡改CA证书的信息基本不可能,因为他们没有CA机构的私钥。
CA证书为什么不可能被篡改:
- 中间⼈篡改了证书的明⽂
- 由于他没有CA机构的私钥,所以⽆法hash之后⽤私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名
- 如果强⾏篡改,客⼾端收到该证书后会发现明⽂和签名解密后的值不⼀致,则说明证书已被篡改,证书不可信,从⽽终⽌向服务器传输信息,防⽌信息泄露给中间⼈
https通信的完整流程
- 客户端请求某个网站
- 网站的服务端发送自己网站的CA证书给客户端
- 客户端验证证书合法性,从而保证后续通信的数据安全新
- 客户端生成一个通信密钥,用CA证书中的公钥加密通信密钥,然后发送给服务端
- 服务端用私钥解密数据,获取到通信密钥,然后就可以进行通信了。
反思
为什么要https的加密流程要弄的这么繁琐,直接使用对称加密或者非对称加密不可以吗?或者使用对称加密+非对称加密呢?
引入CA证书主要是为了防止中间人攻击的情况,如果有中间人在客户端和服务端最开始交换密钥信息的时候,中间人截取密钥信息,在中间篡改密钥信息,就能劫持数据。
相关文章:

计算机网络-http协议和https的加密原理
HTTP(HyperText Transfer Protocol,超文本传输协议)是用于在万维网(World Wide Web)上传输超文本的基础协议。它定义了客户端(通常是浏览器)和服务器之间的文本数据传输格式和规则。以下是HTTP的…...

共享`pexlinux`数据文件的网络服务
实验环境准备: 1.红帽7主机 2.要全图形安装 3.配置网络为手动,配置网络可用 4.关闭vmware DHCP功能 一、kickstart自动安装脚本制作 1.安装图形化生成kickstart自动脚本安装工具 2.启动图形制作工具 3.图形配置脚本 这里使用的共享方式是http࿰…...
HC32F4A0 10路串口UART 配置
HC32 小华MCU 使用一段时间了,反正芯片BUG 是比较多了,比如串口接收错误后导致再也无法接收,PWM模块无法输出 低电平 , CAN 接收错误导致 输出引脚 CAN_TXD 一直输出脉冲 。。。;好的一面也存在吧,IO 引脚…...
拯救PyCharm:击退IDE崩溃的终极策略
拯救PyCharm:击退IDE崩溃的终极策略 PyCharm,作为开发界的明星IDE之一,以其强大的功能和灵活的定制性深受广大开发者喜爱。然而,即便是这样一款卓越的开发工具,也可能会遇到崩溃的问题,影响开发效率和工作…...
深入解析Unix命令:掌握wc、whereis和which的使用技巧
目录 1. wc命令 2. whereis命令 3. which命令 结论 在Unix和类Unix系统中,wc、whereis和which是三个常用的命令行工具,每个都有着独特的功能和用途。让我们逐个来了解它们的作用和使用方法。 1. wc命令 wc命令是"word count"的缩写&…...

奥运会大规模使用中国AI大模型!
B站:啥都会一点的研究生公众号:啥都会一点的研究生 AI圈最近又发生了啥新鲜事? 巴黎奥运会大规模使用中国 AI 大模型 巴黎奥运会成为一场科技与体育的盛宴,其中包括了大量中国科技的应用。AI 技术将在多个方面发挥作用…...

Linux中的线程3
死锁 在Linux操作系统中,死锁(Deadlock)是指两个或多个进程(或线程)在执行过程中,因互相持有对方所需的资源而又都在等待对方释放资源,导致它们都无法继续执行下去的一种状态。这种僵局会浪费系…...

内网权限维持——利用WMI进行权限维持
文章目录 一、WMI事件订阅机制简介二、利用事件订阅进行权限维持三、防御方式 一、WMI事件订阅机制简介 WMI(Windows Management Instrumentation,Windows管理规范)是windows提供的一种能够直接与系统进行交互的机制,旨在为系统中…...

【数据结构算法经典题目刨析(c语言)】括号匹配问题(图文详解)
💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 目录 一、题目描述 二、解题思路 三、代码实现 一、题目描述 二、解题思路 问题要求将三种类型括号匹配,其中包括顺序匹配和数量匹配 使用栈的后进先…...

浅谈 Spring AOP框架 (1)
文章目录 一、什么是 Spring AOP二、为什么要使用 Spring AOP三、AOP 的一些应用场景四、AOP 的组成五、如何使用 Spring AOP六、Spring AOP 的实现原理6.1、JDK 和 CGLIB 的区别 一、什么是 Spring AOP AOP (Aspect Oriented Programming) :面向切面编程ÿ…...
Linux 面试准备 - 2024
复习一下,资料来自慕课网课程 Linux 速成班和一些网上面试资料。 1. Linux 内核功能 1. 内存管理 2. 进程管理 3. 设备驱动程序 4. 系统调用和安全防护 2. 文件系统 - 一切皆文件 2.1 文件目录 /根目录etc配置文件bin必要命令usr 二级目录(非用户…...

C++笔记---类和对象(中)
1. 类的默认成员函数 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。 一个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,分别为:构造函数,析构函数,拷贝构…...

【C++】入门基础知识
河流之所以能够到达目的地,是因为它懂得怎样避开障碍。💓💓💓 目录 ✨说在前面 🍋知识点一:C的发展历史 • 🌰1.C发展历史 • 🌰2.C的迭代与更新 • 🌰3.编程语言排…...
AI的应用场景和未来展望
AI(人工智能)的应用场景广泛且多样,已经深入到我们生活的方方面面,成为现代社会不可或缺的一部分。 AI的应用场景 1、通用软件与工具型应用 办公软件:如钉钉、飞书等,通过AI技术提供内容生成与摘要、智能…...
vim、sublime、notepad文本编辑器的使用
VIM: Windows上配置gvim并作为C和C的IDE Windows上配置gvim并作为C和C的IDE | Reasuon sublime notepad...
PyCharm中的外部更改识别:终极解决方案指南
标题:PyCharm中的外部更改识别:终极解决方案指南 引言 PyCharm,作为JetBrains公司开发的集成开发环境(IDE),以其强大的功能和高效的代码编辑体验而广受开发者喜爱。然而,在开发过程中…...

Qt——QTCreater ui界面如何统一设置字体
第一步:来到 ui 设计界面,鼠标右键点击 改变样式表 第二步:选择添加字体 第三步:选择字体样式和大小,点击 ok 第四步:点击ok或apply,完成设置...

Linux驱动入门实验班day03-GPIO子系统概述
3.通用框架1——最简单方式1:执行命令cat /sys/kernel/debug/gpio查看串口信息 gpio4对应的下列 方式2: 对于按键GPIO4_14:对应第四组第14个引脚 gpiochip3 ,从96开始, 9614110;...

240803-沉侵式翻译插件配置Ollama的API实现网页及PDF文档的翻译
1. 在插件中点击Options按钮 2. 在开发者模式中启动Enable Beta Testing Features 3 在General中进行设置 ## 4. 在Expand中设置API的URL 5. Qwen:0.5B网页翻译效果 6. Qwen:0.5BPDF翻译效果 7. 参考文献 gemma - 给沉浸式翻译插件配置本地大模型o…...
HTML-08.表单标签
一.表单标签 场景:在网页中主要负责数据采集功能,如注册、登录等数据采集 标签:<form> 表单项:不同类型的input元素、下拉列表、文本域等 <input>:定义表单项。通过type属性控制输入形式 <select>:定义下拉列表…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...