计算机网络-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>:定义下拉列表…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...
