TCP/IP详解——HTTPS 协议

文章目录

  • 1. HTTPS 协议
    • 1.1 HTTPS 原理
    • 1.2 HTTPS 过程
    • 1.3 从数据包角度看 HTTPS 交互过程
    • 1.4 常见的 HTTPS 数据包解码
      • 1.4.1 ClientHello 数据包
      • 1.4.2 ServerHello 数据包
    • 1.5 思考

1. HTTPS 协议

1.1 HTTPS 原理

HTTPS概念

HTTPS 是以安全为目标的HTTP通道,并不是独立于HTTP的一个全新协议,而是在HTTP协议的基础上,添加了**SSL/TLS **握手以及数据加密传输,也属于应用层协议。HTTPS 工作在TCP协议的==443==端口。

在这里插入图片描述

HTTP缺点

  1. 通信的时候使用的是明文,内容可能会被窃听。
  2. 不验证通信方的身份信息,有可能遭遇身份伪造。
  3. 无法证明报文的完整性,有可能信息以及被修改。

HTTPS = HTTP + 加密 + 认证 + 完整性保护。

定义

  • HTTPS(全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。

1.2 HTTPS 过程

在这里插入图片描述

HTTPS和HTTP的过程没有什么区别,只是多了一个通过SSL建立加密通道的一个操作。

一开始进行TCP三次握手建立连接,双方开始交互报文。然后建立SSL加密通道,在加密通道中进行HTTP协议的通信。这个时候传输的数据就是密文了。最后数据传输结束后连接断开。

因此在进行HTTPS协议流量分析的时候,往往是分析SSL加密隧道的建立过程。通过对SSL加密隧道的建立过程,可以了解一些信息,判断连接是否安全。

1.3 从数据包角度看 HTTPS 交互过程

image-20231114202349625

  • 在三次握手结束后,由客户端发送一个ClientHello的数据包,在ClientHello的数据包中,客户端会先声明自己所使用的HTTPS的版本,以及声明客户端自己支持的一些加密算法等信息。
  • 服务器在收到ClientHello数据包的时候,会在ClientHello数据包中发来的众多的加密算法中选择安全性最高的一种,作为之后双方交互时使用的加密算法。Server将会选中其中一个算法,发送ServerHello报文。
  • 然后还会发送一个自己的证书(Certificate)给Client。在服务器发送的证书中包含有公钥。属于非对称加密算法,使用公钥加密的数据只能使用私钥去解密,使用私钥加密的数据只能使用公钥去解密。
  • 最后服务器会发送一个SeverHelloDone的消息通知客户端ServerHello结束了。在ServerHello结束后在客户端会生成一个密钥,这个密钥是用于他们以后所有的交互所使用的正常的加密密钥。(这个密钥是使用对称加密算法生成的如:AES,3-DES等典型的对称加密算法)将这个生成的密钥通过Server发送过来的公钥进行加密,这个生成的密钥只能由服务器去解密(公钥加密只能私钥解密)。
  • 客户端会把使用Server公钥加了密的密钥发送给服务器。
  • 客户端发送一个Change Cipher Spec消息表示之后都使用这个加了密的密钥来进行通信。ChangeCipherSpec 是一个独立的协议,体现在数据包中就是一个字节的数据,用于告知服务端,客户端已经切换到之前协商好的加密套件(Cipher Suite)的状态,准备使用之前协商好的加密套件加密数据并传输了。
  • Clinet Finished客户端握手结束通知, 表示客户端的握手阶段已经结束。
  • 服务器使用加了密的密钥来加密一些数据发送给客户端,双方进行测试。如果测试成功的话,双方都使用对称加密算法进行加密了。
  • Server Finished服务端握手结束通知。
  • ⑩… 所以在协商好密钥之后,以后所有的内容都是通过对称加密算法的密钥进行加密了。

1.4 常见的 HTTPS 数据包解码

1.4.1 ClientHello 数据包

客户端发送给服务器的Client数据包

image-20231124214347845

image-20231124214645328

1.4.2 ServerHello 数据包

服务器发送给客户端的ServerHello数据包

服务器会在ClientHello数据包中众多的密码套件中选择一种

image-20231124215029399

image-20231124220005266

1.5 思考

为什么在浏览器使用http协议访问到某一站点时,最终交互时会使用https协议

  1. 服务器强制重定向
    • 服务器可以通过配置强制将HTTP请求重定向到HTTPS。这意味着当尝试使用HTTP访问某个站点时,服务器会发送一个特殊的响应,告诉你使用HTTPS访问。浏览器接收到这个响应后会自动将请求的URL修改为HTTPS,并重新发送请求。
  2. HSTS(HTTP Strict Transport Security)策略
    • 当你首次使用HTTPS访问一个网站时,网站可以在响应头中设置HSTS策略。HSTS是一种安全机制,它告诉浏览器在一段时间内(通常是几个月),只能使用HTTPS与该网站进行通信,不再尝试使用HTTP。当你再次尝试使用HTTP访问该网站时,浏览器会自动将请求转换为HTTPS。

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

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

相关文章

Python到机器学习再到深度学习:一条完整的人工智能学习之路

Python到机器学习再到深度学习:一条完整的人工智能学习之路 引言第一部分:Python基础第二部分:机器学习基础第三部分:深入深度学习 引言 简短介绍Python在数据科学和机器学习领域的重要性。概述本文的目标:提供一个清…

【MCAL】AUTOSAR架构下TC3xx平台的MCAL时钟系统配置实践

目录 前言 正文 1. MCU模块介绍 2. MCAL上的时钟Clock配置 2.1 AUTOSAR标准关于时钟的描述

Node.js 工作线程与子进程:应该使用哪一个

Node.js 工作线程与子进程:应该使用哪一个 并行处理在计算密集型应用程序中起着至关重要的作用。例如,考虑一个确定给定数字是否为素数的应用程序。如果我们熟悉素数,我们就会知道必须从 1 遍历到该数的平方根才能确定它是否是素数&#xff…

RabbitMq基本使用

目录 SpringAMQP1.准备Demo工程2.快速入门1.1.消息发送1.2.消息接收1.3.测试 3.WorkQueues模型3.1.消息发送3.2.消息接收3.3.测试3.4.能者多劳3.5.总结 SpringAMQP 将来我们开发业务功能的时候,肯定不会在控制台收发消息,而是应该基于编程的方式。由于R…

Ubuntu安装蓝牙模块pybluez以及问题解决方案【完美解决】

文章目录 简介问题及解决办法总结 简介 近期因工程需要在Ubuntu中使用蓝牙远程一些设备。安装Bluetooth的Python第三方软件包pybluez时遇到很多问题,一番折腾后完美解决。此篇博客进行了梳理和总结,供大家参考。 问题及解决办法 pip install pybluez安…

Kotlin 协程库v1.7.1的核心模块(kotlinx-coroutines-core)-- kotlinx.coroutines篇

asContextElement&#xff1a; 创建一个协程上下文元素(CoroutineContext.Element)&#xff0c;该元素可以被添加到协程上下文中&#xff0c;以便在特定的协程中检索和使用 注意&#xff1a;上下文元素不跟踪线程局部变量的修改 示例 val myThreadLocal ThreadLocal<Str…

大规模数据可视化(纯文字干货科普)

导读&#xff1a;探讨在处理大规模数据集时如何有效地进行数据可视化&#xff0c;如何在大数据分析中有效传达信息&#xff0c;包括交互式探索、实时仪表板和复杂数据故事讲述。 目录 大规模数据可视化的挑战 数据量问题 性能考量 实时数据 数据可视化的关键技术 数据预…

【算法Hot100系列】最长回文子串

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

springboot(ssm川剧科普平台 川剧交流系统 Java系统

springboot(ssm川剧科普平台 川剧交流系统 Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; 数据库…

NNDL 循环神经网络-梯度爆炸实验 [HBU]

目录 6.2.1 梯度打印函数 6.2.2 复现梯度爆炸现象 6.2.3 使用梯度截断解决梯度爆炸问题 【思考题】梯度截断解决梯度爆炸问题的原理是什么&#xff1f; 总结 前言&#xff1a; 造成简单循环网络较难建模长程依赖问题的原因有两个&#xff1a;梯度爆炸和梯度消失。 循环…

凸函数笔记(1)

目录 1. 凸函数基本概念2.可微函数的凸性判定2.1 函数凸性的微分判据2.2 可微凸函数的例子 3. 保凸运算3.1 复合函数的凸性3.2 几种保凸运算 1. 凸函数基本概念 记 R ‾ : R ∪ { ∞ } . 对函数 f : R n → R ‾ , 称 记\overline{\mathbb{R}}:\mathbb{R}\cup\{\pm\infty\}.…

【MySQL】(DDL) 表操作-查询

查询&#xff1a; show tables ; //查询所有表名称 desc 表名称 ; //查询表结构 show create table 表名称; //查看创建表语句 create table 表名 ( 字段名1 字段类型1,字段名2 字段类型2) ; //创建表结构 示列&#xff1a; 1. show tables; use 数据库名; show tables …

Llama 架构分析

从代码角度进行Llama 架构分析 Llama 架构分析前言Llama 架构分析分词网络主干DecoderLayerAttentionMLP 下游任务因果推理文本分类 Llama 架构分析 前言 Meta 开发并公开发布了 Llama系列大型语言模型 (LLM)&#xff0c;这是一组经过预训练和微调的生成文本模型&#xff0c;参…

uniapp常用api讲解

Uniapp是一个基于Vue.js的跨平台开发框架&#xff0c;可以同时开发微信小程序、H5、App等多个平台的应用。下面是Uniapp常用的API讲解&#xff1a; Vue.js的API Uniapp采用了Vue.js框架&#xff0c;因此可以直接使用Vue.js的API。例如&#xff1a;v-show、v-if、v-for、compu…

二蛋赠书八期:《Java物联网、人工智能和区块链编程实战》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…

深入剖析NPM: Node包管理器的介绍和使用指南

导言&#xff1a;NPM&#xff08;Node Package Manager&#xff09;是JavaScript世界中最受欢迎的包管理器之一。它的出现大大简化了JavaScript开发过程中的依赖管理和模块化。本文将向您介绍NPM的基本概念、功能和常见用法&#xff0c;并为您提供一份详尽的NPM使用指南。 一、…

深度学习优化器Optimizer-SGD、mSGD、AdaGrad、RMSProp、Adam、AdamW

Optimizer 优化 学习率 l e a r n i n g r a t e : α 学习率learning\;rate: \alpha 学习率learningrate:α 防止除 0 的截断参数 : ϵ 防止除0的截断参数: \epsilon 防止除0的截断参数:ϵ t 时刻的参数 : W t t\;时刻的参数: W_{t} t时刻的参数:Wt​ t 时刻的梯度&#xf…

【改进YOLOv8】电动车电梯入户检测系统:融合HGNetv2改进改进YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a; 随着电动车的普及和人们对环境保护的重视&#xff0c;电动车的使用量逐渐增加。然而&#xff0c;电动车的充电问题一直是一个挑战&#xff0c;特别是…

JavaScript中while循环语句

循环语句&#xff08;loop&#xff09; - 通过循环语句可以让一段代码反复的执行多次 - 循环语句主要两种&#xff1a; while语句&#xff08;while循环&#xff09; do-while语句 for语句&#xff08;for循环&#xff09; while语句&#xff1a; - 语法&#xff1a; wh…

React系列:useEffect的使用

useEffect的使用 useEffect的第二个参数不同&#xff0c;useEffect的加载不同 当第二个参数为没有的时候 只在组件初始渲染和组件更新之后加载当第二个参数为[] 的时候 只在初始渲染之后加载当第二个参数为[有依赖] 的时候 只在初始渲染之后和依赖修改的时候进行加载 functi…