计算机网络-http协议和https的加密原理

news2024/9/24 19:36:40

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

  1. 客户端和服务器

    • 客户端:发起请求的一方,通常是浏览器。
    • 服务器:处理请求并返回响应的一方,通常是Web服务器。
  2. 资源

    • 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: 用于对资源进行部分修改。

请求头部:

包括各种请求头字段,如HostUser-AgentAccept等。

HTTP请求报文示例:
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

常见请求头字段

  1. Host:请求的主机名和端口。
  2. User-Agent:客户端软件的信息。
  3. Accept:客户端可处理的媒体类型。
  4. Accept-Encoding:客户端可处理的内容编码。
  5. Cookie:客户端存储的Cookie数据。
  6. Content-Type:请求主体的媒体类型。
  7. 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状态码
服务器在响应中返回的状态码,用于表示请求的处理结果。常见状态码有:

  1. 2xx 成功:
  • 200 OK:请求成功。
  • 201 Created:请求成功并创建了新的资源。
  1. 3xx 重定向:
  • 301 Moved Permanently:资源永久移动到新位置。
  • 302 Found:资源暂时移动到新位置。
  1. 4xx 客户端错误
  • 400 Bad Request:请求有误,服务器无法处理。
  • 401 Unauthorized:未授权,需要身份验证。
  • 403 Forbidden:服务器拒绝请求。
  • 404 Not Found:请求的资源不存在。
  1. 5xx 服务器错误
  • 500 Internal Server Error:服务器内部错误。
  • 503 Service Unavailable:服务器暂时无法处理请求。

2. 响应头部 (Response Headers)

响应头部由多个头字段组成,每个字段包含一个名称和值,用冒号分隔。头部字段提供了关于服务器和返回资源的信息。格式如下:

<头字段名>: <字段值>

例如:

Content-Type: text/html
Content-Length: 1234
Set-Cookie: sessionId=abc123
  1. Date:响应生成的日期和时间。
  2. Content-Type:响应主体的媒体类型。
  3. Content-Length:响应主体的长度。
  4. Set-Cookie:设置Cookie信息。
  5. 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),是一种通过哈希函数将任意长度的数据输入转换为固定长度的输出的技术。数据摘要用于验证数据的完整性,提供快速的内容识别,以及作为密码学中的重要组成部分。以下是数据摘要的详细介绍:

数据摘要的特性

  1. 固定长度输出

    • 不论输入数据的大小如何,哈希函数始终产生固定长度的输出。例如,SHA-256算法总是生成256位(32字节)的摘要。
  2. 单向性

    • 计算数据摘要是单向操作,即很难从摘要逆推出原始数据。这确保了摘要的安全性。
  3. 抗碰撞性

    • 很难找到两组不同的数据拥有相同的摘要。这意味着哈希函数能有效区分不同的数据输入。
  4. 敏感性

    • 对输入数据的微小改变(如改变一个字符)会导致输出摘要的显著变化。这种特性称为雪崩效应。

常见的哈希算法

  1. MD5(Message-Digest Algorithm 5)

    • 生成128位(16字节)的摘要。
    • 由于其抗碰撞性较弱,现已不推荐用于安全应用。
  2. SHA-1(Secure Hash Algorithm 1)

    • 生成160位(20字节)的摘要。
    • 目前也被认为不够安全,已被更强的算法取代。
  3. SHA-256

    • 属于SHA-2系列,生成256位(32字节)的摘要。
    • 提供更高的安全性,广泛用于数字签名和证书。
  4. SHA-512

    • 属于SHA-2系列,生成512位(64字节)的摘要。
    • 适用于需要更高安全性和处理能力的应用场景。

数据摘要的应用:

  1. 数据完整性验证

    • 在数据传输过程中,通过计算和比较数据摘要来验证数据是否被篡改。
    • 例如,在文件下载过程中,提供文件的哈希值供下载者验证。
  2. 数字签名

    • 数字签名算法通过对数据摘要进行加密来验证数据的来源和完整性。
    • 应用于电子邮件签名、软件发布、金融交易等场景。
  3. 密码存储

    • 用户密码存储时通常会先生成哈希值,而不是存储明文密码。
    • 结合盐值(salt)进一步提高安全性,防止彩虹表攻击。
  4. 快速查找和去重

    • 利用数据摘要快速识别和查找重复数据,提升存储和检索效率。
    • 在去重文件存储系统中应用广泛。
  5. 区块链

    • 在区块链中,区块的哈希值用于链接区块并确保链的完整性。

注意事项:

  • 抗碰撞性:选择适合的哈希算法以保证安全性,避免使用已知存在漏洞的算法。
  • 速度与安全性:哈希函数的性能和安全性需要平衡,高安全性的函数可能更慢。
  • 盐值(Salt):在密码存储中使用盐值提高安全性,防止哈希碰撞攻击。

数据摘要是信息安全中的重要工具,在保障数据完整性、验证数据来源及提高存储效率等方面发挥着关键作用。选择合适的哈希算法和策略对于确保应用的安全性至关重要。

CA证书

服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端公钥的权威性。
如果你访问一个安全的网站,你的浏览器会检查该网站的证书是否由一个可信的CA机构颁发,并且该证书是否有效(未过期、未被撤销等)。如果一切正常,浏览器就会建立一个安全连接,保证你的通信不会被第三方窃取或篡改。

一个CA证书通常包含以下信息:

  • 证书版本:证书的版本信息。
  • 序列号:证书的唯一标识。
  • 签名算法:用于签发证书的算法(如SHA-256)。
  • 发行者信息:签发证书的CA的信息。
  • 有效期:证书的生效日期和到期日期。
  • 主体信息:证书所有者的信息(如域名、组织名)。
  • 主体公钥信息:与证书绑定的公钥。
  • 扩展信息:其他附加信息,如用途限制。
  • 签名:CA对证书内容的数字签名,用于验证证书的真实性。

验证一个CA证书是否合法的方法: 计算CA证书信息的hash值未hash1,用CA证书给的公钥解密CA证书给的hash值为hash2,对比hash1和hash2是否相等,如果相等证书为真,如果不相等证书未假,如果有人想篡改CA证书的信息基本不可能,因为他们没有CA机构的私钥。
在这里插入图片描述
CA证书为什么不可能被篡改:

  1. 中间⼈篡改了证书的明⽂
  2. 由于他没有CA机构的私钥,所以⽆法hash之后⽤私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名
  3. 如果强⾏篡改,客⼾端收到该证书后会发现明⽂和签名解密后的值不⼀致,则说明证书已被篡改,证书不可信,从⽽终⽌向服务器传输信息,防⽌信息泄露给中间⼈

https通信的完整流程

  1. 客户端请求某个网站
  2. 网站的服务端发送自己网站的CA证书给客户端
  3. 客户端验证证书合法性,从而保证后续通信的数据安全新
  4. 客户端生成一个通信密钥,用CA证书中的公钥加密通信密钥,然后发送给服务端
  5. 服务端用私钥解密数据,获取到通信密钥,然后就可以进行通信了。
    在这里插入图片描述

反思

为什么要https的加密流程要弄的这么繁琐,直接使用对称加密或者非对称加密不可以吗?或者使用对称加密+非对称加密呢?

引入CA证书主要是为了防止中间人攻击的情况,如果有中间人在客户端和服务端最开始交换密钥信息的时候,中间人截取密钥信息,在中间篡改密钥信息,就能劫持数据。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

J030_TCP通信

一、需求描述 使用TCP协议进行通信 1.1 一发一收 1.1.1 Client package com.itheima.tcp1;import java.io.DataOutputStream; import java.io.OutputStream; import java.net.Socket;public class Client {public static void main(String[] args) throws Exception {//1、…

嵌入式初学-C语言-练习三

#部分题目可能在之前的博客中有&#xff0c;请谅解&#xff0c;保证常见题型均被发出# 1.计算n以内所有正奇数的和 ? n值通过键盘输入 代码&#xff1a; 1 /*2 需求&#xff1a;计算n以内所有正奇数的和 ? n值通过键盘输入3 */4 #include <stdio.h>5 6 int main()7 …

用手机剪辑视频素材从哪里找?用手机视频素材库分享

视频编辑是一门充满创意的艺术&#xff0c;无论是制作短片、广告还是个人Vlog&#xff0c;都离不开高质量的视频素材。如果自己拍摄的素材不能完全满足创作需求&#xff0c;或者需要更多样化的内容来丰富视频&#xff0c;那么优质的视频素材来源至关重要。下面推荐几个提供高品…

LinuxC++(8):GDB调试

下载gdb gdb需要使用yum下载 yum -y install gdb 编译注意 需要在后面加上 -g &#xff0c;证明是要给可调试文件。 开始调试 gdb函数名 修改主函数参数 set args //set args "小红" "小华" "爱你" 在linux中显示行号 在vi下&#xff0c;输入…

C++自定义接口类设计器之函数解析二

关键代码 // 解析为函数 bool FunctionCreator::parse(const QString& lineFunc) {auto trimFunc lineFunc.trimmed();auto list trimFunc.split(" ");bool bHasReturn false;// 返回值和函数名解析for (const auto& key : list) {auto trimKey key.trim…

麦田物语第十八天

系列文章目录 麦田物语第十八天 文章目录 系列文章目录一、(Editor)制作 [SceneName] Attribute 特性二、场景切换淡入淡出和动态 UI 显示一、(Editor)制作 [SceneName] Attribute 特性 在本节课我们编写Unity的特性Attribute来更好的完善我们项目,具体是什么呢,就是当…

一款简单且强大的免费开源图片压缩软件

图压是一款简单易用且功能强大的图片压缩工具&#xff0c;适用于Windows和macOS两大操作系统。它能够在几乎不损害图片清晰度的情况下&#xff0c;显著减小图片的体积&#xff0c;特别适合需要在网页、PPT、Word、PDF中使用的图片压缩。图压的操作界面简洁&#xff0c;用户可以…

Kettle同步数据时如何借助Shell通过SSH连接MySQL数据库

在实际开发中&#xff0c;经常会用到KettleSpoon来同步数据&#xff0c;比如&#xff1a;需要定时将MySQL库某张表前一天的数据同步到SQL Server&#xff08;MySQL&#xff09;库中等等。一般由于安全性都会提供基于秘钥的连接方式&#xff0c;这种情况下如何在Kettle中连接数据…

Wordpress建站问题记录

从一月到七月因为工作的情况没有进行太深入的开发,想着整理一下把做一个独立站把博客多个渠道发布一下,遇到几个问题在这里记录一下. 先写一下我的配置 系统: centos7 php: 7.4 wordpress: 6.6.1 mysql:8.0.6 1. HTTP 500 Internal 这个问题出现在我将wordpress的文件夹全部…

运维变革背景下的运维工具衍化探讨

在数字化转型的浪潮中&#xff0c;运维领域正经历着前所未有的变革。这一变革不仅重塑了业务形态&#xff0c;也对运维工具和运维组织模式产生了深远影响。随着基础设施云化、容器化、微服务化等技术的兴起&#xff0c;运维对象、运维流程、协同关系等各个方面都发生了深刻的变…

J.U.C 原子类之AtomicIntegerFieldUpdate

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

MySQL:数据库用户

数据库用户 在关系型数据库管理系统中&#xff0c;数据库用户&#xff08;USER&#xff09;是指具有特定权限和访问权限的登录账户。每个用户都有自己的用户名和密码&#xff0c;以便系统可以通过认证来识别他们的身份。数据库用户可以登录数据库&#xff0c;在其中执行各种类…

第二十天学习笔记2024.8.2

安装mysql 1.安装软件包 centos7 中安装 mysql 8.x_wffkg-CSDN博客 2.解压 tar -xf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 3.卸载mariadb yum remove -y *mariadb* 4.安装&#xff08;缺什么依赖补什么&#xff09; mysql-community-server-8.0.33-1.el7.x86_64.rpm 5.…

APP逆向 day26unidbg下-pdd(anti)案例

一.前言 今天我们讲unidbg的下篇&#xff0c;也就是unidbg基础的最后一个部分&#xff0c;我们上节课也有补环境&#xff0c;比如补java环境&#xff0c;补安卓环境&#xff0c;这节课我们讲的肯定比这些都要难&#xff0c;我会给出一个之前讲过的案例&#xff0c;然后会讲一个…

如何建立与众不同的市场洞察能力【深度】

来源&#xff1a;战略研发领航 建立与众不同的市场洞察机制&#xff0c;展示了如何在组织中建立一种以数据和洞察为核心的文化&#xff0c;并通过4S周期&#xff08;架构、探查、塑造、成型&#xff09;的洞察工作方法论&#xff0c;指导领导者和团队在各个层级上进行更有效的思…

【C语言】C语言期末突击/考研--函数

目录 一、函数的声明与定义-嵌套调用 1.1.函数的声明与定义 1.2.函数的分类与调用 二、函数的递归调用 三、局部变量与全局变量 3.1.全局变量解析形参实参解析 3.2.局部变量与全局变量 四、练习题及解析 一、函数的声明与定义-嵌套调用 1.1.函数的声明与定义 函数间的…

Code Review 这件事,AI 比人类强 10 倍

1.引言 代码审查&#xff0c;也就是 Code Review&#xff08;以下简称 CR&#xff09;&#xff0c;一直是 IT 行业讨论的热门话题&#xff0c;因为它在很大程度上决定了公司的工程质量。 但是&#xff0c;人工 CR 的成本的是很高的&#xff0c;所以在实际落地场景&#xff0c…

latex换行\left[和\right]编译报错-解决方案

简而言之&#xff1a;\\ 换成 \right.\\ , & 换成 &\left. 来个例子就知道了&#xff1a; 原本的公式是&#xff1a; \begin{align}\label{up_critic} L_Q(\theta) & \mathbb{E}\left[\frac{1}{2}(Q_\theta(\mathcal{S}_{k,t}^m, {A}_{k,t}^m) - ({R}_{k,t}^m …

07030405复杂可编程逻辑器件CPLD现场可编程阵列FPGA

复杂可编程逻辑器件CPLD&现场可编程阵列FPGA 7.3 复杂可编程逻辑器件CPLD7.3.1CPLD的结构 7.4现场可编程门阵列FPGA7.4.1FPGA实现逻辑功能的基本原理7.4.2FPGA结构简介1.可编程逻辑块2.I/O块3.可编程连线资源CPLD与FPGA的区别 7.5可编程逻辑器件开发过程简介编程条件 7.3 复…

细说文件操作

你好&#xff01;感谢支持孔乙己的新作&#xff0c;本文就结构体与大家分析我的思路。 希望能大佬们多多纠正及支持 &#xff01;&#xff01;&#xff01; 个人主页&#xff1a;爱摸鱼的孔乙己-CSDN博客 目录 1.什么是文件 1.1.程序设计文件 1.1.1.程序文件 1.1.2.数据文件…