【Linux】HTTP协议和HTTPS加密

文章目录

  • HTTP
    • 1、概念
    • 2、认识URL
    • 3、协议格式、请求方法和状态码
    • 4、HTTP请求和响应报头
    • 5、Cookie和Session
  • HTTPS
    • 1、对称和非对称加密
    • 2、对称非对称加密安全分析
    • 3、证书

HTTP

1、概念

  我们在应用层定制协议时,不建议直接发送结构体对象,因为在不同的环境下,结构体内存对齐规则可能不一样。而自己制定的协议格式,又存在很多问题、不足。对此,我们学习成熟、优秀的HTTP协议来提升自己对协议的理解,提高自己的协议定制能力。
  HTTP(Hyper Text Transfer Protocol):全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。同时它是基于客户端-服务器模型:即客户端(如浏览器)发起请求,服务器处理请求并返回响应。

一个典型的HTTP请求-响应周期如下:

  • 1、建立TCP连接:客户端首先与服务器建立TCP连接。HTTP协议通常使用80端口(HTTP)或443端口(HTTPS)
  • 2、发送HTTP请求:客户端通过TCP连接发送HTTP请求。请求包括请求行、请求头和请求体(可选)
  • 3、处理请求:服务器接收到请求后,解析请求,执行相应的操作(如查询数据库、处理文件等),并生成响应
  • 4、返回HTTP响应:服务器将响应通过TCP连接发送回客户端。响应包括状态行、响应头和响应体
  • 5、关闭连接:请求和响应完成后,TCP连接通常会被关闭。HTTP/1.1引入了持久连接(Keep-Alive),允许在同一连接上进行多次请求和响应
  • 2、认识URL

      URL(统一资源定位符)是互联网上资源的地址,也称为网址。它标识并定位网页、图片、视频、文件等资源。一个完整的URL由多个部分组成,每部分有特定作用。以下是URL的组成部分解析:


      点分十进制的IP地址给用户使用体验感并不好,对此,域名会被解析成IP地址。现实生活中,我们通信真正用到的是IP地址,用域名标识互联网中的一台唯一主机,协议和端口号标识该主机上唯一的一个服务,资源路径找到唯一的一个资源。
      少量的情况,提交或者获取的数据本身可能包含和URL中特殊的字符冲突的字符,要求BS(浏览器和服务器)双方进行编码(encode)和解码(decode),编码解码浏览器和服务器默认帮我们处理了,通常无需手动干预。

    3、协议格式、请求方法和状态码



      HTTP方法这么多,但是大多对用户是禁用的,我们最常使用的就两个GET和POST:即上传数据和接受数据两种。当我们想提交参数给服务器时,使用GET方法提交的参数是通过URL提交的,参数受限;POST方法也支持提交参数,通过请求的正文部分提交参数,比GET方法私密一点。 GET请求可以被保存为书签和历史记录,而POST请求不可以。


      我们平时常见的状态码:比如200(OK),404(Not Found),403(Forbidden 无请求权限),302(Redirect,重定向),504(Bad Gateway)
      重定向可分为临时重定向和永久重定向,其中状态码301表示的就是永久重定向,而状态码302和307表示的是临时重定向。当我们想要登陆,点击登陆就会跳转到登陆页面,这是重定向。而当我们登陆成功后又会返回主页面,这也是重定向。重定向要配合报头 Location: URL\r\n 字段来使用

    4、HTTP请求和响应报头

    属性名说明
    Accept告知服务器客户端可以接受的MIME类型(如text/html, application/json)
    Accept-Charset客户端可以接受的字符集(如UTF-8)
    Accept-Encoding客户端支持的内容编码(如gzip, deflate)
    Accept-Language客户端优先选择的语言(如en-US, zh-CN)
    User-Agent

    客户端的软件信息(如浏览器类型和版本)

    Cache-Control指定缓存机制如何处理请求和响应(如no-cache, max-age=3600)
    Connection控制当前连接的选项(如keep-alive)
    Content-Length请求体的长度(字节数)
    Content-Type请求体的MIME类型(如application/json)
    Cookie客户端发送给服务器的cookie信息
    Host请求的目标主机和端口号(如example.com:8080)
    Origin指示请求的发起源,常用于CORS(跨域资源共享)
    Referer指示请求的来源URL,即当前页面是从哪个页面跳转过来的
    Location搭配3XX状态码使用,告诉客户端接下来要去哪里访问

    长短连接:(HTTP/1.0使用短连接,HTTP/1.1及以后的版本使用长连接)
      短连接指的是每个HTTP请求/响应对都使用一个独立的TCP连接。请求完成后,连接立即关闭,客户端和服务器在后续请求时需要重新建立连接。缺点就是会降低性能效率低。
      长连接指的是在一个TCP连接上可以发送多个HTTP请求和响应对。连接在一个请求/响应周期后不会立即关闭,而是保持打开状态,允许后续的请求和响应在同一连接上进行。体现在请求报头的Connection:keep-alive字段

    5、Cookie和Session

    Cookie和Session:
      HTTP是一个无状态协议,这意味着每个请求都是独立的,服务器不会保留以前的请求信息。为了保持状态(比如登陆状态),Web应用通常使用Cookie和Session等技术。
      Cookie 是存储在客户端(浏览器)中的一个小型文本文件,用于存储用户的会话信息。主要用于在客户端和服务器之间传递信息,例如用户身份验证状态、用户偏好设置等。而Session 是服务器端用于存储用户会话信息的机制,用于跟踪用户会话,存储用户身份验证状态、购物车内容等敏感或大型数据。

      当客户端首次访问服务器时,服务器通过HTTP响应头的Set-Cookie字段发送Cookie到客户端,客户端将这些Cookie存储在本地。在随后的请求中,客户端通过HTTP请求头的Cookie字段自动发送Cookie回服务器,服务器读取Cookie信息以识别用户并响应请求。同时,服务器为每个用户创建唯一的Session ID,存储在服务器端,并同样通过Set-Cookie发送Session ID给客户端。客户端在后续请求中发送Session ID,服务器使用Session ID检索会话信息,处理请求。这样,Cookie和Session协同工作,使服务器能够识别和跟踪用户的会话状态。


    对比与总结:

    特性CookieSession
    存储位置客户端服务器端
    安全性相对较低,易受客户端攻击相对较高,不易受客户端攻击
    容量限制每个Cookie 4KB左右,每个域名20-50个Cookie通常没有容量限制,取决于服务器存储容量
    依赖机制独立存在,用于存储少量数据依赖Cookie或URL重写传递Session ID
    使用场景存储用户偏好、跟踪会话状态等存储用户身份验证状态、购物车内容等敏感信息

    HTTPS

      HTTP协议最初设计用于网页内容的快速传输。然而,由于HTTP传输的数据是明文,存在数据被窃取或篡改的风险。为提升数据传输的安全性,SSL协议被开发出来,其后继者TLS(传输层安全协议)进一步增强了安全性。将SSL/TLS协议应用于HTTP协议之上,即结合体HTTPS。
      简单理解就是HTTPS在HTTP的基础上做了加密处理,所谓加密就是让传输的明文数据通过一系列手段加工成密文,解密就是将密文再进行一系列手段加工成明文,在加密解密过程中辅助这个过程完成的数据叫做密钥。

    1、对称和非对称加密

      对称加密是采用单钥密码系统的加密方法,同一个密钥可以同时用作信息数据的加密和解密,这种加密的方式称为对称加密,也称为单密钥加密

  • 特征:加密和解密的密钥都是相同的
  • 常见的对称加密算法:DES、3DES、AES、TDEA、Blowfish、RC2等
  • 特点:算法库开源、计算量小、加密速度快、加密效率高
  • 对称加密其实就是通过同一个“密钥”,把明文加密成密文,并且也能用密钥将密文解密成明文

  •   非对称加密是一种加密技术,它使用一对密钥:公钥和私钥。公钥可以公开,任何人都可以使用它来加密信息,但只有持有对应私钥的人才能解密。私钥是保密的,只有拥有者可以使用它来解密信息,或者加密信息。这种加密方式允许安全地交换信息,因为即使公钥被截获,没有私钥也无法解密信息。私钥加密的信息只能由公钥解密,而公钥加密的信息只能由私钥解密

  • 常见非对称加密算法:RSA、 DSA、ECDSA等
  • 特点:算法强度复杂、安全性依赖于算法与密钥,但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快
  • 公钥和私钥是配对的,最大的缺点就是运算速度非常慢,比对称加密算法慢得多
  • 2、对称非对称加密安全分析

      只使用对称加密,涉及密钥交换问题:在建立安全通信之前,双方需要安全地交换密钥,这本身是一个挑战,特别是在未建立安全通信之前。
      只使用非对称加密:只能保证一端通信是安全的。假设公钥和私钥是由服务器生成的,那么客户端到服务器端的通信是安全的,因为只有服务器有私钥。可是服务器到客户端的通信并不是安全的,因为中间人也有服务器生成的公钥,能解密知道明文内容。那如果双方都各自生成公钥和私钥,然后交换公钥的话,可以暂时解决问题,但是这样子双方通信效率太低了。
      使用非对称和对称加密:在非对称加密的基础上,让服务器生成公钥S和私钥S'对,保证客户端到服务器单方通信安全。然后客户端生成对称密钥X,用S加密发送给服务器,只有服务器能用私钥S'解密。之后双方的通信使用对称密钥X,来进行加密解密保证效率。

      可是这样子仍然是不安全的,有一种中间人攻击(MITM)方案:一开始就把服务器发来的公钥S替换掉,客户端也是毫不知情的,它并不知道发来公钥是否合法。

    MIMT攻击过程如下:

    • 服务器拥有公钥 S、私钥 S';中间人拥有公钥M、私钥M';客户端拥有对称密钥X
    • 客户端向服务器发起请求连接,服务器将公钥S以报文的形式发送客户端
    • 中间人劫持报文,将服务器公钥S并且保存起来,重新伪造报文将自己的公钥M发送给客户端
    • 客户端获取到公钥M,通过这个公钥M加密X,形成报文发送给服务器
    • 中间人再次劫持,通过自己的私钥M'解密,获取到密钥X。将上次-保存的服务器公钥S对密钥X加密处理,形成报文后发送给服务器,服务器通过私钥S'解密,还原出客⼾端发送的对称密钥X
    • 此后的服务器客户端之间进行的对称加密通信,在中间人看来是毫无作用。密钥X中间人也有,当前面两者进行通信时,中间人直接解密获取对应的数据,甚至修改数据都可以

    3、证书

      现在我们找到了通信安全的核心问题:即如何验证服务器发来公钥的合法性?对此我们引入证书来解决这个问题。

    证书组成部分:

    • 公钥:证书中包含服务器的公钥,用于加密数据或验证数字签名
    • 数字签名:由CA使用其私钥对证书内容进行签名,确保证书未被篡改
    • 所有者信息:包括服务器的域名、组织名称等信息,用于识别服务器的身份
    • 证书颁发机构(CA)的信息:指明颁发该证书的CA,以及CA的数字签名,保证证书的可信度
    • 有效期:证书的有效时间范围。过期的证书需要更新,否则浏览器会提示用户连接不安全

    数据摘要和数据指纹和数字签字补充:

      数据摘要,也称为数字指纹:利用单向散列函数(如Hash函数)对信息进行处理,生成固定长度的数字摘要的技术。这种摘要用于验证数据的完整性,因为即使是微小的数据变化也会导致完全不同的摘要结果。常见的摘要算法包括MD5、SHA1、SHA256和SHA512等,它们将无限长的输入映射到有限长度的输出,尽管存在理论上的碰撞(两个不同输入产生相同输出)风险,但实际上非常低
      数据摘要不是加密,因为没有解密过程。它主要用于确保数据未被篡改,通过比较数据的原始摘要和传输或存储后的摘要来检测变化。如果两者一致,数据未被篡改;如果不一致,数据可能已被篡改。这种方法常用于验证文件完整性、数字签名等场景。对数据摘要进行加密,就能得到数字签名了

    为什么签名不直接加密,而是要先hash形成摘要?
      签名不直接加密整个数据而是先做哈希哈摘要,主要是因为效率。直接加密大量数据会很慢,而且对比解密后的数据也很耗时。用哈希摘要,数据量小得多,验证起来快得多。


      验证服务器发来公钥的合法性,变成验证证书的合法性。先对数据进行散列算法,得到数据指纹,用CA机构的私钥对数据指纹加密得到签名。(浏览器内置了很多CA机构的公钥,客户端只认CA的公钥)
      中间人如果只篡改了证书的明文:由于他没有CA机构的私钥,所以无法Hash之后使用私钥形成数字签名,那么也没有办法对篡改后的证书形成匹配的签名
      中间人如果篡改了证书的签名:这时候,无论是否篡改证书的明文,客户端收到证书后都会发现明文hash后的散列值,和签名解密后的值不一致。因为hash过程是不可逆的,同时客户端只认CA的公钥进行解密,所以中间人再怎么修改,也没资格进行证书的全新形成!
      如果对证书的整体掉包:但是别忘记,证书明⽂中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来证书有问题。所以安全高效的通信就是使用:非对称加密+对称加密+证书认证

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 (1)互联网的组成

一、互联网的边缘部分 互联网的边缘部分由所有连接在互联网上的主机组成,这些主机又称为端系统(end system)。端系统可以是各种类型的计算机设备,如个人电脑、智能手机、网络摄像头等,也可以是大型计算机或服务器。端系…

网络延迟对Python爬虫速度的影响分析

Python爬虫因其强大的数据处理能力和灵活性而被广泛应用于数据抓取和网络信息收集。然而,网络延迟是影响爬虫效率的重要因素之一。本文将深入探讨网络延迟对Python爬虫速度的影响,并提供相应的代码实现过程,以帮助开发者优化爬虫性能。 网络…

单片机设计电流与温度监控python上位机监控平台设计

目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代工业自动化和智能设备管理中,对电流和温度的实时监控是…

通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制

目录 通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制 一、引言 二、语义搜索与 MongoDB Atlas 的背景 三、MongoDB Atlas 的向量搜索功能 1. 向量搜索的实现方式 2. 典型操作示例 四、RAG 在 MongoDB Atlas 的应用 1、RAG是什么 2、RAG 的实现过程 3、RA…

Spring——事务

事务 JdbcTemplate 简介 Spring框架对JDBC进行封装&#xff0c;使用JdbcTemplate方便实现对数据库操作 准备工作 ①搭建子模块 搭建子模块&#xff1a;spring-jdbc-tx ②加入依赖 <dependencies><!--spring jdbc Spring 持久化层支持jar包--><dependenc…

C++ —— 哈希详解 - 开散列与闭散列

目录 1. 哈希的概念 1.1 直接定址法 1.2 哈希冲突 1.3 负载因子 1.4 哈希函数 1.4.1 除法散列法/除留余数法 1.4.2 乘法散列法 1.4.3 全域散列法 1.5 处理哈希冲突 1.5.1 开放定址法&#xff08;闭散列&#xff09; 1. 线性探测&#xff08;挨着查找&#xff09; 2.…

苦等三年!金克斯大人回来了!

2021年《英雄联盟&#xff1a;双城之战》第一季上线&#xff0c;该动画连续三周在全球 52 个国家和地区占据榜单前十&#xff0c;并在第49届安妮奖中斩获最佳电视 / 流媒体类动画、最佳艺术指导、最佳角色动画等9项大奖。 苦等三年&#xff01;&#xff01;&#xff01; 《双城…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备:大华IPC摄像头局域网访问异常解决办法

在当今社会&#xff0c;安全监控已成为各类场所不可或缺的一部分。无论是家庭、学校、商业场所还是公共场所&#xff0c;安全监控设备都扮演着至关重要的角色。在众多监控品牌中&#xff0c;大华IPC摄像头凭借其高清画质、强大功能和卓越稳定性&#xff0c;赢得了市场的广泛认可…

随机数

目录 一、传统方式&#xff1a;std::rand 和 std::srand 使用方法&#xff1a; 优缺点&#xff1a; 二、现代方式&#xff1a; 库&#xff08;推荐&#xff09; 1. 随机整数 2. 随机浮点数 3. 布尔值 4. 字符 5. 正态分布&#xff08;高斯分布&#xff09; 6. 离散分…

Python Plotly 库使用教程

Python Plotly 库使用教程 引言 数据可视化是数据分析中至关重要的一部分&#xff0c;它能够帮助我们更直观地理解数据、发现潜在的模式和趋势。Python 提供了多种数据可视化库&#xff0c;其中 Plotly 是一个功能强大且灵活的库&#xff0c;支持交互式图表的创建。与静态图表…

LeetCode题解:5.最长回文子串【Python题解超详细,中心拓展、动态规划、暴力解法】

题目描述 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 解答 class Solution(object):def longestPalindrome(self, s):""":type s: str:rtype: str"""# 思路一&#xff1a;中心拓展def extend_from_center(left,right):# 从中心向…

企业一站式管理系统odoo的研究——PLM插件的搭建

大纲 1. 环境准备1.1 安装操作系统1.2 更新操作系统1.3 配置用户组和用户1.3.1 创建用户组 odoo1.3.2. 创建用户 odoo1.3.3. 设置用户 odoo 的密码1.3.4. 验证用户和组1.3.5. 将用户 odoo 添加到添加sudo组&#xff1a;1.3.6. 切到odoo用户 2. 安装 Odoo1. 安装依赖项目2.2. 安…

Keil基于ARM Compiler 5的工程迁移为ARM Compiler 6的工程

环境&#xff1a; keil版本为5.38&#xff0c;版本务必高于5.30 STM32F4的pack包版本要高于2.9 软件包下载地址&#xff1a;https://zhuanlan.zhihu.com/p/262507061 一、更改Keil中编译器 更改后编译&#xff0c;会报很多错&#xff0c;先不管。 二、更改头文件依赖 观察…

ABAP开发学习——ST05 ABAP SQL跟踪工具

操作步骤 第一步使用ST05之前&#xff0c;将要查的程序停留想要看的操作的前一步&#xff0c;这里想看到取数操作&#xff0c;所以停留在选择界面 第二步进入ST05 选择SQL Trace 然后激活 第三步去执行程序 第四步ST05取消激活 第五步查看操作 选完时间直接执行

C/C++语言基础--C++模板与元编程系列六,C++元编程相关库的讲解与使用

本专栏目的 更新C/C的基础语法&#xff0c;包括C的一些新特性 前言 模板与元编程是C的重要特点&#xff0c;也是难点&#xff0c;本人预计将会更新10期左右进行讲解&#xff0c;这是第六期&#xff0c;讲解元编程相关库等&#xff0c;本人感觉这一部分内容还是比较复杂的&am…

uni-app之数据驱动的picker选择器( uni-data-picker)之可以选择到任意级别

背景说明 uni-app 官方的插件市场有数据驱动选择器&#xff0c;可以用作多级分类的场景。本人引入插件后&#xff0c;发现&#xff0c;在h5和微信小程序都只能选择到叶子级。而在给出的官方组件示例中确并非如此。 以选择年级&#xff0c;而不选择班级。然后&#xff0c;想试试…

探索 HTML 和 CSS 实现的蜡烛火焰

效果演示 这段代码是一个模拟蜡烛火焰的HTML和CSS代码。它创建了一个具有动态效果的蜡烛火焰动画&#xff0c;包括火焰的摆动、伸缩和光晕的闪烁。 HTML <div class"holder"><div class"candle"><div class"blinking-glow"&g…

react + ts定义接口类型写法

接口&#xff08;未进行ts定义&#xff09; export async function UserList(params: {// keyword?: string;current?: number;pageSize?: number;},// options?: { [key: string]: any }, ) {return request<API1.UserList>(http://geek.itheima.net/v1_0/mp/artic…

【教程】Ubuntu设置alacritty为默认终端

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 背景介绍 设置教程 注意事项 背景介绍 alacritty是一个开源的终端&#xff0c;比默认的xterm更好看&#xff0c;甚至编辑文本时候还会代码高亮…

使用Element UI实现前端分页,及el-table表格跨页选择数据,切换分页保留分页数据,限制多选数量

文章目录 一、前端分页1、模板部分 (\<template>)2、数据部分 (data)3、计算属性 (computed)4、方法 (methods) 二、跨页选择1、模板部分 (\<template>)2、数据部分 (data)3、方法 (methods) 三、限制数量1、模板部分 (\<template>)2、数据部分 (data)3、方法…