HTTP、HTTPS、SSL协议以及报文讲解

news2024/7/31 8:08:18

目录

HTTP/HTTPS介绍

HTTP/HTTPS基本信息

HTTP请求与应答报文

HTTP请求报文

HTTP响应报文

SSL协议

SSL单向认证

SSL双向认证

HTTP连接建立与传输步骤

HTTP访问全过程相关报文(以访问www.download.cucdccom为例子)

DNS报文解析

TCP三次握手连接

进行HTTP交互(明文)

HTTPS连接建立与传输步骤

HTTPS通信全过程简要步骤

HTTPS访问全过程相关报文(以访问www.baidu.com为例子)

DNS解析报文

TCP三次握手连接

SSL握手报文(单向)

进行HTTPS交互(密文)


HTTP/HTTPS介绍

HTTP/HTTPS基本信息

HTTP(Hypertext Transfer Protocol)基本概念

HTTP是用于从万维网(www)服务器传输超文本到本地浏览器的超文本传输协议,所有的HTML文件(网页文件)都是遵循这个标准进行传输的

并且HTTP是一种分布式、通用的、无状态的面向应用层的协议(C/S架构,也支持B/S)

HTTP的分布式特性

分布式指的是一个网站上的内容分布到多个服务器上

HTTP的无状态性

web服务器不会针对用户的访问过程做记录

当一个用户访问过该网站后,等下次第二次访问时,服务器不知道该用户曾经访问过

该特性简化了HTTP服务器的设计,使其更容易支持大量并发的HTTP请求

Cookie—帮助HTTP实现有状态

HTTP协议通过在请求/响应报文中写入Cookie信息来识别客户端,将客户端发送的小心进行上下文关联

具体过程如下

Cookie是一种在客户端保持HTTP状态信息的技术,由Web服务器将其携带在响应报文中发送给客户端浏览器,存储在客户端

当用户第一次请求HTTP服务器时,服务器不知道用户的身份;当服务器向其发送HTTP响应时会为其创建一个独特的身份标识数据(也就是Cookie,格式为key=value;并通过在本地创建一个MAP结构来存储Cookie),然后将其放入set-cookie字段,随着响应报文一同发给用户

当用户收到响应报文后,将set-cookie中的cookie保存起来,这个就是服务器发给我的身份标识,当用户下一次请求的时候就会将这cookie放进请求字段中发给服务器

当服务器收到请求后发现有cookie字段,查询是来自哪一个客户端的请求,与服务器中的cookie对比识别出用户身份,提供个性化服务

HTTP的连接方式

非持久性连接:该连接不是持久存在的,一个连接只进行一次数据交互(即:每次传输数据时建立此连接,数据传输完毕后就断开连接)

持久性连接:连接是持久存在的,在一个连接中进行多次的数据交互

HTTPS基本概念

为什么提出HTTPS

由于HTTP是不加密的,在公网上明文传输,缺少保密性

为了保证隐私数据能够加密传输,所以就出现了安全加密的HTTP协议,也就是HTTPS协议

HTTPS就是通过SSL/TLS对HTTP协议进行加密(HTTPS=SSL/TLS+HTTP)

HTTPS和HTTP的区别

HTTPS协议需要使用到数字证书(需要向CA申请)

HTTPS和HTTP端口号不一样;HTTP为TCP 80端口,HTTPS为TCP 443端口

HTTPS能够对传输的信息进行加密,更加安全

URL(Uniform Resource Locator)的概念

URL是统一资源定位符,用来唯一标识万维网中的某一个文档;通过URL,可以直接使用HTTP/HTTPS协议访问到具体的文档

URL由协议、主机、端口号、文件名及路径组成

HTTP请求与应答报文

HTTP请求报文

请求行

Request Method请求方法,GET和POST是比较常见的请求方法

GET:请求获取Request-URL所标识的资源

POST:在Request-URL所标识的资源后附加新的数据(上传数据—例如登录-HTTP为明文)

DELETE:请求服务器删除Request-URL所标识的资源

HEAD:请求获取有Request-URL所标识的资源的响应消息报头

OPTIONS:请求查询服务器的性能(或查询与资源相关的选项和需求)

PUT:请求服务器存储一个资源,并用Request-URL作为其标识

TRACE:请求服务器回送收到的请求消息(主要用于测试或诊断)

CONNECT:保留将来使用

Request URL:      请求的URL

Request VersionHTTP版本号

请求头部(由关键字和值组成,关键字和值使用”:”分隔,每行一对)

Host请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机

Connection连接方式(close 或 keepalive)

User-Agent携带用户主机的操作系统版本、访问该网站的浏览器信息等

Accept客户端可识别的响应内容类型列表(星号 “ * ” 用于按范围将类型分组;用 “ */* ” 指示可接受全部类型;用“ type/* ”指示可接受 type 类型的所有子类型;)

Referer告诉服务器我目前访问的该网页来自哪个页面(referer主要出现在网页之间相互跳转的场景)

Accept-Language客户端可接受的自然语言

Accept-Encoding客户端可接受的编码压缩格式

Accept-Charset可接受的应答的字符集

Cookie存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie(记录登录的状态(第一次登录输入账号密码,后续登录就不需要登录了))

HTTP响应报文

状态行

Status Code状态码

状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示

       1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;

       2xx:表示服务器已成功接收到请求并进行处理;

       3xx:表示服务器要求客户端重定向;

       4xx:表示客户端的请求有非法内容;

5xx:表示服务器未能正常处理客户端的请求而出现意外错误;

具体常见状态码的值及其描述

       200 OK:表示客户端请求成功;

       302 Found:表示该资源原本存在,但是已经被临时改变了位置(服务器通常会给浏览器发送Location字段来告诉浏览器改变后的位置)

       307 Internal Redirect:内部重定向(与302其实是一致的,唯一的区别在于307状态码不允许浏览器将原本为POST的请求重定向到GET请求上)

       400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解

       404 Page Not Found:标识客户端请求的资源不存在

首部行(由关键字和值组成,关键字和值使用”:”分隔,每行一对)

Server:告诉浏览器服务器的名称和版本号(如:Apache/2.2.10)(深信服可以通过AF将此字段隐藏—应用隐藏功能)

Content-Type:实体报头域用语指明发送给接收者的消息主体的媒体类型(如:Content-Type:text/html)


SSL协议

SSL协议基本概念

SSL(Secure Socker Layer)安全套接字层,位于应用层和传输层之间的一种协议层,属于Socket层的时间

SSL建立在TCP之上,为应用层协议提供数据封装、压缩、加密等基本功能

并且可以通过互相认证、使用数字签名、加密等实现客户端和服务器之间的安全通信

SSL协议的组成

SSL协议是由SSL记录协议层和SSL握手协议层两层组成的一个协议簇

SSL记录协议层

该层是为高层协议提供基本的安全服务,实现对数据的分块、加解密、压缩与解压缩、完整性校验以及高层协议的封装

SSL记录协议针对HTTP协议进行了特别的设计,使得HTTP能够在SSL上运行

SSL握手协议层

SSL握手协议层包含SSL握手协议(SSL HandShake Protocol)、SSL密码变更协议(SSL Change Cipher Spec Protocol)、SSL报警协议(SSL Alert Protocol)

SSL密码更改协议:更新用于当前连接的密码组

SSL报警协议:为通信的双方传递SSL的相关警告

SSL握手协议:允许通信实体在交换应用数据之前协商密钥的算法,并对客户端进行认证

SSL握手的相关报文内容字段在(HTTPS访问全过程讲解)

SSL单向认证

握手步骤简单讲解

  1. 客户端发送client hello(包含支持的协议版本、加密算法和随机数A)
  2. 服务返回Hello(公钥证书、随机数B)
  3. 客户端使用CA验证服务器证书,确认无误后,生成随机数c,用公钥加密发给服务器(客户端通过a、b、c生成对称秘钥进行数加密)
  4. 服务用私钥解密得到c,通过a、b、c生成对称秘钥进行数据加密
  5. 最后双方进行数据加密

握手步骤详细讲解

1、交互Hello报文(客户端生成随机数R1,服务端生成随机数R2相互交换),协商配置信息(SSL版本、加密算法等)

2、服务端向客户端发送数字证书,并通过加密算法生成一个Server Params(椭圆曲线的公钥),该公钥通过服务端的私钥签名认证---(当进行双向验证时则需要客户端也向服务器发送证书)

3、客户端使用CA的公钥解密证书验证服务端证书的真实性,然后通过证书的摘要算法对证书数据生成摘要,与证书携带的摘要进行对比,来验证书是否被篡改。此时客户端获得证书的公钥。并通过该服务端公钥解密服务端发来的Server Params

4、此时客户端就有了R1、R2和Server Params三个参数,这时客户端也会通过双方协商的加密算法生成一个Client Params(椭圆曲线的公钥),并通过服务端的公钥加密将其发给服务端;然后将Client Params和Server Params生成一个Pre-Masterkey(也算是一个随机数);最后客户端又通过R1、R2、Pre-Master生成主秘钥

5、然后服务器端通过私钥解密得到客户端发来的Client Params(然后服务器也会根据R1、R2、Server Params、Client Params先生成Pre-MasterKey,再生成主秘钥);由于黑客破解不了客户端发送的Client Params,因此无法得到数据密钥

6、最后双方通过主秘钥派生出的客户端会话密钥和服务端会话秘钥来加密数据

交互报文

Client Hello

携带客户端的SSL版本、加密套件列表、压缩算法列表、客户端随机数;sessionid=0

Server Hello

服务器根据客户端的Hello报文协商加密套件、压缩算法、计算sessionid

将其发送给客户端(并携带生成的随机数)

Server Certificate

服务器将自己的证书发给客户端

Server Hello Done

服务器通知客户端握手消息发送完成

Client Key Exchang

客户端密钥交换(产生预主秘钥preMasterKey,将自己的Client Params使用服务器的公钥加密)

Change Cipher Spec

改变加密约定消息,通知服务端之后的消息启用加密参数

Client Finished Message

客户端SSL协商成功结束,发送握手验证报文确保消息的完整性

Change Cipher Spec

改变加密约定消息,通知客户端之后的消息启用加密参数

Server Finished Message

服务器SSL协商成功结束,发送握手验证报文确保消息的完整性

SSL双向认证

SSL双向认证就是多了服务器验证客户端证书的认证(服务器发送自己的证书之后,同时请求客户端的证书,客户端将证书发送给服务器,服务器通过CA进行验证客户端认证)

具体报文交互


HTTP连接建立与传输步骤

HTTP不同场景下的通信过程和用户上网认证过程分析-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_49864110/article/details/134864720?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134864720%22%2C%22source%22%3A%22m0_49864110%22%7D

  1. 浏览器分析URL连接(找到访问的域名),并发送DNS请求得到关于该域名的IP地址
  2. DNS将解析出来的IP地址返回给浏览器
  3. 浏览器与服务器建立TCP连接
  4. 浏览器发送请求(GET或POST)
  5. 服务器给出响应
  6. 断开TCP连接

HTTP访问全过程相关报文(以访问www.download.cucdccom为例子)

DNS报文解析

TCP三次握手连接

进行HTTP交互(明文)


HTTPS连接建立与传输步骤

HTTPS通信全过程简要步骤

  1. 浏览器分析URL连接(找到访问的域名),并发送DNS请求得到关于该域名的IP地址
  2. DNS将解析出来的IP地址返回给浏览器

3、浏览器与服务器建立TCP连接

4、进行SSL握手

5、进行加密数据传输

6、释放TCP连接(同HTTP)

HTTPS访问全过程相关报文(以访问www.baidu.com为例子)

DNS解析报文

TCP三次握手连接

SSL握手报文(单向)

进行SSL握手阶段

Version:SSL版本号

Random:客户端随机数

Cipher suites:支持的加密算法列表

Server name:服务端名称(www.baidu.com)

Compression Methods:支持的压缩算法

还会携带sessionid

确定SSL版本、加密套件、压缩算法、携带服务器生成的随机数、计算sessionid

Version:版本号

Random:随机数

Session ID:计算出来的会话ID

Cipher suite:加密套件算法

Compression Method:压缩算法(此处表示没有)

进行HTTPS交互(密文)

数据加密传输

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

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

相关文章

智能配电监控系统

智能配电监控系统是针对供配电系统中的变配电环节,利用现代计算机控制技术、通信技术和网络技术等,采用抗干扰能力强的通讯设备及智能电力仪表,经电力监控管理软件组态,实现的系统的监控和管理。依托电易云-智慧电力物联网&#x…

生成式人工智能笔记-AIGC笔记

生成式人工智能笔记-AIGC笔记 十多年前,人工智能还只是一个不被人看好的小众领域,但是现在,它却已经成了街头巷尾的热点谈资,几乎任何事情都可以和人工智能联系在一起。 人工智能包括基础层、技术层和应用层。 基础层是人工智能…

数字营销影响消费者行为的 6 种方式

如果您正在考虑转向在线市场,那么这个决定就好了!没有什么比数字营销更强大的了。但是,在开始之前,请了解数字营销如何影响消费者行为。由于客户是任何企业的基石,因此跟踪消费者行为至关重要。 数据分析在识别潜在客…

LeetCode力扣每日一题(Java):20、有效的括号

一、题目 二、解题思路 1、我的思路 我看到题目之后&#xff0c;想着这可能是力扣里唯一一道我能秒杀的题目了 于是一波操作猛如虎写出了如下代码 public boolean isValid(String s) {char[] c s.toCharArray();for(int i0;i<c.length;i){switch (c[i]){case (:if(c[i]…

Git 配置文件(.gitignore)

前言 在使用 Git 分布式版本控制系统的时候&#xff0c;有些文件如&#xff1a;数据库的一些配置文件&#xff0c;我们不想让这类文件在远程仓库让 Git 来管理&#xff0c;不想让别人看到&#xff0c;此时就可以自己在 Git 仓库目录下创建 / 在远程仓库创建的时候就配置好 .git…

【从零开始学习JVM | 第五篇】快速了解运行时数据区

前言&#xff1a; 当谈论 Java 程序的运行机制时&#xff0c;JVM&#xff08;Java 虚拟机&#xff09;的运行时数据区是一个必不可少的话题。JVM 运行时数据区是 Java 程序在运行过程中分配内存和管理数据的重要区域&#xff0c;它包括了方法区、堆、虚拟机栈、程序计数器和本地…

TA-Lib学习研究笔记(九)——Pattern Recognition (4)

TA-Lib学习研究笔记&#xff08;九&#xff09;——Pattern Recognition &#xff08;4&#xff09; 最全面的形态识别的函数的应用&#xff0c;通过使用A股实际的数据&#xff0c;验证形态识别函数&#xff0c;用K线显示出现标志的形态走势&#xff0c;由于入口参数基本上是o…

js/jQuery常见操作 之 jQuery操作复选框的常见问题

js/jQuery常见操作 之 jQuery操作复选框的常见问题 1. js/jQuery的其他一些常见基础操作2. 全选/全不选问题2.1 效果2.2 实现代码2.2.1 简单js实现2.2.2 jQuery实现2.2.2.1 注意语法&#xff08;区别jQuery版本&#xff09;2.2.2.2 完整代码实现 3. jQuery实现点击 行tr 实现ch…

【GAMES101】三维变换

games101的第四节课讲了三维变换和观察变换&#xff0c;我们这里先记录一下三维变换的知识&#xff0c;后面再讲观察变换 齐次坐标下的三维变换 类似于解决之前二维变换平移的问题&#xff0c;三维变换下用齐次坐标通过增加一个维度来表示&#xff0c;第四个维度为1表示这是个…

自动数据增广论文笔记 | AutoAugment: Learning Augmentation Strategies from Data

谷歌大脑出品 paper: https://arxiv.org/abs/1805.09501 这里是个论文的阅读心得&#xff0c;笔记&#xff0c;不等同论文全部内容 文章目录 一、摘要1.1 翻译1.2 笔记 二、(第3部分)自动增强:直接在感兴趣的数据集上搜索最佳增强策略2.1 翻译2.2 笔记 三、跳出论文&#xff0c…

Python超级详细的raise用法

当程序出现错误时&#xff0c;系统会自动引发异常。除此之外&#xff0c;Python 也允许程序自行引发异常&#xff0c;自行引发异常使用 raise 语句来完成。 很多时候&#xff0c;系统是否要引发异常&#xff0c;可能需要根据应用的业务需求来决定&#xff0c;如果程序中的数据…

智能配电房解决方案

智能配电房解决方案运用物联网、云计算、大数据、人工智能等先进技术&#xff0c;构建具备遥测、遥信、遥控、遥调、遥视功能的智能配电房&#xff0c;依托电易云-智慧电力物联网实现对配电室的全面感知、智能监控、优化运行、精益管理&#xff0c;提高供电可靠性&#xff0c;降…

系统设计之数据库

为您的项目选择正确的数据库是一项复杂的任务。许多数据库选项都适合不同的用例&#xff0c;很快就会导致决策疲劳。 我们希望这份备忘单提供高级指导&#xff0c;以找到符合您项目需求的正确服务并避免潜在的陷阱。 注意&#xff1a;Google 关于其数据库用例的文档有限。尽管…

笔记本用gpu运行tensorflow-gpu,keras写的老程序,结果与原来不一样,一脸懵逼。

先说结论我笔记一是rtx3050ti, 重点RTX30系列最低要求CUDA版本为11.1&#xff0c;否则最后跑程序会报错。再说现象&#xff0c;突发奇想想在笔记本上运行一个以前在1080titensorflow-gpu1.5.2,keras2.2.4上面写的一个图像分类模型&#xff0c;先用cpu模式 运行一下一切正常。如…

探索正则可视化工具:让编程更直观、高效

导语&#xff1a;在当今的编程世界中&#xff0c;正则表达式已成为不可或缺的技能。然而&#xff0c;理解和编写正则表达式往往是一项具有挑战性的任务。为了降低门槛&#xff0c;提高编程效率&#xff0c;正则可视化工具应运而生。 一、正则表达式的简介与历史 正则表达式&a…

基于JNI实现调用C++ SDK

基于JNI实现调用C SDK 背景分析解决实践 背景 上篇文章总结了几种Java项目调用C/C SDK项目方法&#xff0c;在逐一实践、踩坑后&#xff0c;最终还是敲定采用 JNI 方式进行实现。在文章开始的过程&#xff0c;会先大概讲讲笔者遇到的情况&#xff0c;因为封装方式需要根据实际…

文本润色工具有哪些,高质量的文本润色软件

在当今信息过载的时代&#xff0c;文本的重要性愈发凸显。即便是最精心构思的文章&#xff0c;若未经过仔细的润色&#xff0c;也难以达到最佳的表达效果。本文将专心分享文本润色工具的种类。 文本润色工具的种类 文本润色工具根据其功能和应用范围可以分为多个种类&#xff…

【C语言快速学习基础篇】之二控制语句、循环语句、隐式转换

文章目录 一、控制语句1.1、for循环1.2、while循环1.3、注意&#xff1a;for循环和while循环使用上面等同1.4、do while循环1.4.1while条件成立时1.4.2、while条件不成立时 C语言介绍 C语言是一门面向过程的计算机编程语言&#xff0c;与C、C#、Java等面向对象编程语言有所不同…

python pydoc生成API文档

pydoc是python内置的一个文档生成模块。 pydoc 模块会根据 Python 模块来自动生成文档。 生成的文档可在控制台中显示为文本页面&#xff0c;提供给 Web 浏览器访问或者保存为 HTML 文件。 对于模块、类、函数和方法&#xff0c;显示的文档内容取自文档字符串&#xff08;即 _…

202350读书笔记|《再别康桥:徐志摩诗选》——微风起,清芬酝藉,不减荼

202350读书笔记|《再别康桥&#xff1a;徐志摩诗选》——微风起&#xff0c;清芬酝藉&#xff0c;不减荼 《再别康桥&#xff1a;徐志摩诗选》我觉得有时候诗人是很狂热的&#xff0c;上头的感觉。 有几首很喜欢&#xff0c;节选如下&#xff1a; 偶然 我是天空里的一片云&…