【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的公钥进行解密,所以中间人再怎么修改,也没资格进行证书的全新形成!
      如果对证书的整体掉包:但是别忘记,证书明⽂中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来证书有问题。所以安全高效的通信就是使用:非对称加密+对称加密+证书认证

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FlinkPipelineComposer 详解

FlinkPipelineComposer 详解 原文 背景 在flink-cdc 3.0中引入了pipeline机制,提供了除Datastream api/flink sql以外的一种方式定义flink 任务 通过提供一个yaml文件,描述source sink transform等主要信息 由FlinkPipelineComposer解析&#xff0c…

Python中如何获取HTTP请求的Response Body

目录 一、引言 二、使用urllib库获取Response Body 1. 基本用法 2. 发送POST请求 三、使用requests库获取Response Body 1. 安装requests库 2. 基本用法 3. 发送POST请求 4. 处理JSON响应 四、高级用法 1. 处理请求头 2. 设置超时 3. 处理Cookies 五、案例&#…

从华为到创业公司

我有一个朋友,在华为工作了很长一段时间,一年多前,他从华为出来到了一家创业公司。 周末趁着有时间,我跟他聊了下关于从华为到创业公司的一些问题,总结给大伙看看。 ▎1 在华为工作和在创业公司工作最大的差别是什么呢…

如何解决由于找不到d3dx9_43.dll导致游戏启动失败?这里是如何解决的完整指南

遇到“由于找不到d3dx9_43.dll”错误时,很多用户可能会感到困惑和无助。这个问题通常发生在尝试启动游戏或使用基于DirectX的应用程序时。d3dx9_43.dll是Microsoft DirectX软件的一部分,专门用于处理复杂的图形计算,缺少它意味着某些图形功能…

Matlab2022b安装MinGW64

1 问题引入 能找到这个问题的,一定就是在matlab中用mex这个编译命令的时候出现下面的错误,才会来找解决的办法。 首先在网上众多资料中一定是让你先去matlab窗口的这个Add-Ons进行添加,但是很多情况下因为大家装的版本问题,都会…

低代码可视化-uniapp开关选择组件-低码生成器

开关(Switch)选择组件是一种用户界面元素,允许用户在两种状态(通常是开/关、是/否、启用/禁用等)之间进行切换。这种组件在移动应用、桌面软件、网页以及物联网设备中广泛应用。以下是对开关Switch选择组件的详细介绍&…

蓝桥杯每日真题 - 第11天

题目:(合并数列) 题目描述(14届 C&C B组D题) 解题思路: 题意理解:给定两个数组,目标是通过若干次合并操作使两个数组相同。每次合并操作可以将数组中相邻的两个数相加&#xff…

【2024软考架构案例题】你知道什么是 RESTful 风格吗?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

面试经典 150 题:20、2、228

20. 有效的括号 参考代码 #include <stack>class Solution { public:bool isValid(string s) {if(s.size() < 2){ //特判&#xff1a;空字符串和一个字符的情况return false;}bool flag true;stack<char> st; //栈for(int i0; i<s.size(); i){if(s[i] ( |…

NFS-Ganesha 核心架构解读

NFSv4 简要概述 NFS 这个协议( NFSv2 )最初由 Sun Microsystems 在 1984 年设计提出&#xff0c;由于存在一些不足&#xff0c;因此在随后由几家公司联合推出了 NFSv3。到了 NFSv4 时&#xff0c;开发完全由 IETF 主导&#xff0c;设计目标是&#xff1a; 提高互联下的 NFS 访…

由播客转向个人定制的音频频道(1)平台搭建

项目的背景 最近开始听喜马拉雅播客的内容&#xff0c;但是发现许多不方便的地方。 休息的时候收听喜马拉雅&#xff0c;但是还需要不断地选择喜马拉雅的内容&#xff0c;比较麻烦&#xff0c;而且黑灯操作反而伤眼睛。 喜马拉雅为代表的播客平台都是VOD 形式的&#xff0…

mysql数据库(五)多表查询

多表查询 文章目录 多表查询一、链表查询1.1交叉连接1.2 内连接1.3 左连接1.4 右连接1.5 全连接1.6 例子 二、子查询2.1 in与not in2.2 any/some2.3 all2.4 比较运算符2.5 exists 三、例子 查询中使用的表如下所示 ------------ | id | name | ------------ | 1 | IT | …

Redis设计与实现 学习笔记 第十七章 集群

Redis集群是Redis提供的分布式数据库方案&#xff0c;集群通过分片&#xff08;sharding&#xff0c;水平切分&#xff09;来进行数据共享&#xff0c;并提供复制和故障转移功能。 17.1 节点 一个Redis集群通常由多个节点&#xff08;node&#xff09;组成&#xff0c;在刚开…

分布式----Ceph部署

目录 一、存储基础 1.1 单机存储设备 1.2 单机存储的问题 1.3 商业存储解决方案 1.4 分布式存储&#xff08;软件定义的存储 SDS&#xff09; 1.5 分布式存储的类型 二、Ceph 简介 三、Ceph 优势 四、Ceph 架构 五、Ceph 核心组件 #Pool中数据保存方式支持两种类型&…

【Qt聊天室客户端】消息功能--发布程序

1. 获取文件内容 主要目标是实现获取内容二进制数据的接口&#xff0c;主要是为后面的消息功能提供服务 具体实现 客户端发送请求 服务端处理请求&#xff0c;同时支持三种数据类型 客户端处理服务端的响应 2. 发送图片消息 客户端与服务端的通信约定 客户端从服务器中获取图片…

ab (Apache Bench)的使用

Apache Bench&#xff08;ab&#xff09;是一个用于基准测试HTTP Web服务器的命令行工具&#xff0c;广泛用于评估和优化Web服务器的性能。以下是关于Apache Bench的详细介绍&#xff0c;包括其功能、使用方法、常用参数和输出结果解析。 功能 性能测试&#xff1a;通过模拟多…

【HarmonyNext】显示提示文字的方法

【HarmonyNext】显示提示文字的方法 本文介绍在 HarmonyNext 中显示提示文字的两种常见方法&#xff1a;使用自定义弹窗 CustomDialog 和使用 promptAction 的 showToast 方法。 一、使用自定义弹窗 CustomDialog 在 HarmonyNext 中&#xff0c;自定义弹窗是实现复杂提示信…

第三十一天|贪心算法| 56. 合并区间,738.单调递增的数字 , 968.监控二叉树

目录 56. 合并区间 方法1&#xff1a;fff 看方法2&#xff1a;fff优化版 方法3&#xff1a; 738.单调递增的数字 968.监控二叉树&#xff08;贪心二叉树&#xff09; 56. 合并区间 判断重叠区间问题&#xff0c;与452和435是一个套路 方法1&#xff1a;fff 看方法2&am…

【自用】0-1背包问题与完全背包问题的Java实现

引言 背包问题是计算机科学领域的一个经典优化问题&#xff0c;分为多种类型&#xff0c;其中最常见的是0-1背包问题和完全背包问题。这两种问题的核心在于如何在有限的空间内最大化收益&#xff0c;但它们之间存在一些关键的区别&#xff1a;0-1背包问题允许每个物品只能选择…

【Unity】ScriptableObject的应用:利用配方合成新物体

前一篇已经使用ScriptableObject(SO)类配置可放置物体&#xff0c;本篇探索更多的SO类应用场景。 需求分析 将若干指定物体放在工作台上&#xff0c;可以生成新的物体。 成果展示 Scene部分 准备工作台&#xff0c;放在工作台上的物体全部放在指定PlacedObjects空物体下。 …