HTTPS 是如何进行安全传输的 ?

news2024/12/24 0:26:00

概述

现代密码学对信息的处理主要离不开以下的三种形式:

  1. 摘要:主要用于数据校验,例如存储密码等,摘要是对信息进行单向的哈希,改变信息的原有形态,因为哈希函数的特点是易变性(即使微小的变化也会产生完全不同的哈希值),而且无法被反向推导出来,例如上文提到常见的哈希加密方式有:MD2/4/5/6、SHA0/1/256/512 算法等方式。

  2. 加密:主要用于保证信息的安全传输,确保真实的信息只能被授权的人访问(拥有密钥),通常使用密钥对信息进行加密,和摘要不同的是,加密是可以解密为明文信息的。密钥的类型又分为:对称型密钥,非对称型密钥(公钥、私钥)等,常见的有 DES、AES、RC4、IDEA 等方式。

  3. 签名:主要是用来保证明文信息的完整性、真实性和检查是否被篡改的一种方式(使用哈希函数),例如 jwt 令牌 中就是有一段签名,用于保证负载信息的真实性,签名并不保证信息的私密性。

总体来说,它们的分工是:

  • 摘要:用于确保数据的完整性和快速比较,无法被解密。

  • 加密:用于保护数据的机密性,它和摘要的区别是加密可以逆向破解,也就是解密。

  • 签名:则提供了一种验证消息来源和完整性的方法。但信息是公开的。

这三者共同构成了现代密码学的基石,广泛应用于数据保护、身份验证和网络安全等领域。

密钥

对称型密钥

对称加密

对称型密钥加密的基本原理是将明文数据通过一个加密算法和一个密钥转换成密文,然后接收方使用相同的密钥和解密算法将密文还原成原始的明文。由于加密和解密都使用同一个密钥,因此被称为对称加密。对称型密钥加密算法的特点是算法简单、速度快,适合于大量数据的加密。常见的对称型密钥加密算法包括:AES (Advanced Encryption Standard)DES (Data Encryption Standard)3DES (Triple DES)

对称型密钥在密钥的保管和分发上面存在困难,因为密钥必须安全地分发给所有需要它的用户,并且每次通信都需要一个新的密钥,这在大规模通信中可能会变得复杂。关于对称型密钥总结如下:

  • 优点:加解密速度快,适合大量数据、算法简单,资源消耗低,适合大量数据的加解密的场景。

  • 缺点:密钥的保存和分发困难:无法在不可信的网络上进行分发,存在 “先有鸡,还是先有蛋” 的问题。

非对称型密钥

非对称加密

非对称型密钥加密,也称为公钥加密或双密钥加密,是一种使用两个不同密钥的加密方法:一个用于加密(称为公钥),另一个用于解密(称为私钥)。公钥可以公开分享,而私钥则必须保密。

非对称加密的基本原理是:

  1. 密钥生成:首先生成一对密钥,包括一个公钥和一个私钥。这两个密钥是数学上相关的,但即使知道了公钥,也无法轻易推导出私钥。

  2. 加密:当 A 想要向 B 发送加密信息时,A 会使用 B 的公钥来加密信息。这样,只有拥有相应私钥的 B 才能解密这条信息。

  3. 解密:B 收到加密信息后,使用自己的私钥来解密,恢复原始信息。

非对称加密的关键特性是公钥可以公开,而私钥必须保密。这使得非对称加密在某些应用场景中非常有用,但非对称加密的主要缺点是计算复杂,消耗资源,速度慢等,因此它通常与对称加密结合使用:非对称加密用于安全地交换对称密钥,然后使用对称密钥进行实际的数据加密,以提高效率。使用非对称型密钥主要解决两个不信任个体在不安全通信环境下的信息传输问题,解决信息在公开网络中传输的问题,既然被截获也不会受到影响。关于非对称型密钥总结如下:

  • 优点:使用密钥对解决密钥分发的问题,可以在公开网络中安全传输信息

  • 缺点:速度慢,不适合对大量数据进行加密,计算资源消耗高,拥有长度的限制多长的密钥只能加密多长的明文。

因此,对称密钥和非对称密钥的区分是为了满足不同的安全需求、提高效率、简化密钥管理,并适应不同的通信场景。单独依靠某一种算法(对称加密、非对称加密)既做不了加密,也做不了签名。在实际应用中,对称加密和非对称加密往往是结合使用的。已混合加密方式来保护信道安全。

具体做法:

  1. 使用非对称加密方式,协商一个密钥(少量信息)给通信的另一方

  2. 双方基于共同的密钥进行对称加密传输大量的信息

混合使用对称和非对称加密方法来传输信息,这样可以同时利用两种加密方式的优势,也称为现代密码学套件。信息传输的终极解决方案 HTTPS 就是基于该方式实现的。

证书

在现实生活中,我们要和一个未曾谋面的人建立信任,通常有两种方式:

  1. 基于共同的私密信息:对方打电话来说是我的小学同学,他能说出我们小学还有同学的名字,做过的一些糗事,那么我就会信任他

  2. 基于权限的公证人:对方说他是警察,需要我配合办案,如果他能提供证件和警员编号,那么我们也会信任他,并且进行配合

在网络世界里面,我们不能认为两台计算机是相互认识并且存在共同的私密信息的,所以解决信任问题只有基于第二种 基于权限的公证人 的方式。

CA 认证中心

CA 认证中心是负责给计算机的服务端颁发数字证书(Certificate)的机构,类似于上面例子中给警察颁发证件的权威机构类似。当客户端访问服务端时,会检查服务端的证书是有效,确认无误后才会建立安全链接。

安全链接标识

服务端的 PKI 证书是遵循 X.509 标准,证书包含了用于 SSL/TLS 通信的信息,具体如下:

数字证书

  1. 版本:指出该证书使用了哪种版本的 X.509 标准(版本 1、版本 2 或是版本 3)

  2. 序列号:由 CA 分配的证书唯一的标识符。

  3. 证书签名算法:说明数字证书所使用的签名算法。

  4. 发行者:证书颁发机构可识别名称

  5. 有效期:证书的有效期,包括开始和结束日期。

  6. 主题:证书持有者的名称,通常是域名,全网唯一。

  7. 使用者公钥信息:由 CA 中心颁发给证书持有人的公钥和公钥算法信息。

  8. 扩展属性:一些后期用于扩展的其他属性。

安全传输协议

前面介绍的繁琐的密钥和证书等机制,最终都是为了安全传输所准备的。如何将复杂的技术无感知的应用在所有人都使用的网络通信中,成为工程师要面对的挑战之一,SSL/TLS 技术也经历的漫长时间和摸索,早在 1994 年就开始尝试。以下是 SSL/TLS 技术的简要发展历:

  1. 1994年:SSL 的引入 - 安全套接字层(SSL)是由网景公司(Netscape)开发的,目的是为了提供一种安全的网络传输机制来保护网上交易的隐私和完整性。

  2. 1999年:TLS 的诞生 - 传输层安全协议(TLS)1.0 被作为 SSL 的后续标准正式发布,由互联网工程任务组(IETF)进行标准化。TLS 在设计上与SSL 3.0相似,但增强了安全性并修复了 SSL 的一些缺陷。

  3. 2006年:TLS 1.1发布 - 作为对 TLS 1.0 的改进,TLS 1.1 在安全机制上做了进一步的增强,如引入了显式 IV 以防止密码本重放攻击。

  4. 2008年:TLS 1.2 发布 - TLS 1.2 进一步增强了协议的安全性,引入了更多的加密算法和安全特性,比如支持 SHA-256 散列函数。

  5. 2018年:TLS 1.3发 布 - TLS 1.3 简化了握手过程,提高了连接的速度和安全性。它移除了一些过时的算法和特性,使得协议更加健壮和难以被攻击。

TLS 在传输之前的握手过程一共需要进行上下两轮、共计四次通信,通过混合使用非对称加密交换密钥,使用对称加密传输信息的方式保障通信安全。如图:

TLS 四次握手

  1. 客户端发送 ClientHello 消息:客户端以明文的方式向服务器发送一个 ClientHello 消息,该消息包括客户端支持的 TLS 版本、加密算法列表(密码套件)、会话ID(用于会话恢复)和客户端生成的随机数。

  2. 服务器回应 ServerHello 消息:服务器选择一个共同的 TLS 版本和密码套件,并向客户端发送 ServerHello 消息。此消息包括服务器生成的随机数和会话ID,

  3. 客户端确认 Client Handshake Finished:客户端首先会验证证书的有效性,如果没有问题,客户端会根据特定算法计算出 MasterSecret 作为后续对称加密的私钥,32 位随机数,编码改变通知,此消息使用新的加密参数发送,验证握手的完整性等。

  4. 服务端确认 Server Handshake Finished:服务端向客户端回应最后的确认通知,包括:编码改变通知,服务器握手结束通知等

通过四次握手,一个 TLS 安全连接建立。客户端和服务端通过握手协商出许多信息,例如:只有双方才知道的随机密钥,传输过程采用的对称加密算法(例如 AES 128 等)、压缩算法等。TLS 安全连接的建立,最终实现了以下的效果:

  • 保障所有信息都是第三方无法窃听(加密传输)

  • 无法篡改(一旦篡改通信算法会立刻发现)

  • 无法冒充(证书验证身份)的

这种处理方式对上层的用户,虽然在传输性能上会有下降,但在功能上完全不会感知到有 TLS 的存在。建立在这层安全传输层之上的 HTTP 协议,就被称为 “HTTP over SSL/TLS”,也即是大家所熟知的 HTTPS 了。

文章转载自:肖卫卫讲编程

原文链接:https://www.cnblogs.com/xiao2shiqi/p/18178400

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

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

相关文章

医学四种概念:B超、X光、CT、核磁共振

辐射检测:CT和X光 X光:X光检测价格低、时间短、出片快、辐射小,适合前期检查。由于人体各个组织对X线所产生的影响是不同的,所以就有不同的反应实验就是下图 生成的图片为,它把三维的你压缩成二维的图片了&#xff0c…

上位机图像处理和嵌入式模块部署(树莓派4b和mcu的分工与配合)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 树莓派4b从广义上来说,它本身就是一个mini小电脑。我们需要什么软件,就可以apt install去下载即可。这和之前嵌入式linux开…

探索设计模式的魅力:权力集中,效率提升,中心化模式的优势与挑战

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 ✨欢迎加入探索中心化模式之旅✨ 大家好啊!👋 这次我们要聊的是IT界一…

matlab使用教程(66)—在图中绘制多条曲线(2019b以下版本)

您可以采用多种方式合并绘图。利用子图,可在同一坐标区中合并多个图,或在一个图窗中创建多个坐标区。 1.在同一坐标区中合并绘图 默认情况下,新图将清除现有图,并重置标题等坐标区属性。但是,您可以使用 hold on 命令…

Netty HTTP2 示例-响应式编程-013

🤗 ApiHug {Postman|Swagger|Api...} = 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Next Generation API Development Platform …

数据结构复习指导之二叉树的概念

文章目录 二叉树 考纲内容 复习提示 1.二叉树的概念 1.1二叉树的定义及其主要特性 1.1.1二叉树的定义 1.1.2几种特殊的二叉树 1.1.3二叉树的性质 1.2二叉树的存储结构 1.2.1顺序存储结构 1.2.2链式存储结构 知识回顾 二叉树 考纲内容 (一)树…

Rust 使用egui创建一个简单的下载器demo

仓库连接: https://github.com/GaN601/egui-demo-download-util 这是我第一个rust gui demo, 学习rust有挺长时间了, 但是一直没有落实到实践中, 本着对桌面应用的兴趣, 考察了slint、egui两种框架, 最后还是选择了egui. 这篇博客同时包含我当前的一些理解, 但是自身技术有限,…

中职大数据专业介绍:大数据技术应用

近年来,人工智能在经济发展、社会进步、国际政治经济格局等方面已经产生重大而深远的影响。规划纲要对“十四五”及未来十余年我国人工智能的发展目标、核心技术突破、智能化转型与应用,以及保障措施等多个方面都作出了部署。 据2020年全国教育事业发展统…

Python - 金三银四心路历程 之 数据结构与算法 刷题

目录 一.引言 二.心路历程 三.刷题经历 四.刷题历程 五.总结 一.引言 <夜深人静写算法> 是 23 年 12 月底博主打算跳槽时开始做刷题准备做的专栏&#xff0c;前后准备了大约一个月&#xff0c;刷题完毕后简单准备了项目和简历后就开始加入找工作大军了&#xff0c;最…

【DevOps】Jenkins 集成Docker

目录 1. 安装 Docker 和 Jenkins 2. 在 Jenkins 中安装 Docker 插件 3. 配置 Docker 连接 4. 创建 Jenkins Pipeline 5. 示例 Pipeline 脚本 6. 运行 Jenkins Job 7. 扩展功能 8、docker配置测试连接的时候报错处理 将 Docker 与 Jenkins 集成可以实现持续集成和持续交…

介绍 ffmpeg.dll 文件以及ffmpeg.dll丢失怎么办的五种修复方法

ffmpeg.dll 是一个动态链接库文件&#xff0c;属于 FFmpeg运行库。它在计算机上扮演着非常重要的角色&#xff0c;因为它提供了许多应用程序和操作系统所需的功能和组件。当 ffmpeg.dll 文件丢失或损坏时&#xff0c;可能会导致程序无法正常运行&#xff0c;甚至系统崩溃。下面…

box-decoration-break 使用介绍

box-decoration-break属性的使用 一、定义 box-decoration-break是CSS片段模块&#xff08;CSS Fragmentation Module Level 3&#xff09;中的一个属性&#xff0c;主要用于指定背景&#xff08;background&#xff09;、内边距&#xff08;padding&#xff09;、边框&#…

Flink container exit 143 问题排查

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

Flask SQLAlchemy 技术指南

文章目录 什么是 Flask SQLAlchemy&#xff1f;安装 Flask SQLAlchemy创建 Flask 应用和数据库模型添加和查询数据运行 Flask 应用总结**数据库迁移&#xff08;Database Migrations&#xff09;****复杂查询****关系模型****事务处理****性能优化****安全性****扩展功能** Fla…

【2024高校网络安全管理运维赛】巨细记录!

2024高校网络安全管理运维赛 文章目录 2024高校网络安全管理运维赛MISC签到考点&#xff1a;动态图片分帧提取 easyshell考点&#xff1a;流量分析 冰蝎3.0 Webphpsql考点&#xff1a;sql万能钥匙 fileit考点&#xff1a;xml注入 外带 Cryptosecretbit考点&#xff1a;代码阅读…

Pyecharts的编程环境准备

一&#xff0c;准备Python编程环境&#xff1a; Python版本&#xff1a;3.10以上&#xff0c;最高版本3.12 https://www.python.org/ 进入官网&#xff0c;点击downloads—>windows进入下载页面&#xff0c;搜索”3.10.6”找到指定版本&#xff0c;下载并安装64位Installer…

可视化-实验四- seaborn工具包绘图基础及关系

一、任务一 1.1 开发环境 多种选择方案&#xff08;大家根据自己的编程习惯&#xff0c;选择适合自己的工具&#xff09;&#xff0c;老师授课如下&#xff1a;Anaconda3Jupter 1.2 特殊包 导入工具包设置中文显示&#xff1a; import matplotlib.pyplot as plt import p…

HTTP常见面试题(二)

3.1 HTTP 常见面试题 HTTP特性 HTTP 常见到版本有 HTTP/1.1&#xff0c;HTTP/2.0&#xff0c;HTTP/3.0&#xff0c;不同版本的 HTTP 特性是不一样的。 HTTP/1.1 的优点有哪些&#xff1f; HTTP 最突出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。 1. 简单 HTTP…

Metasploit Framework(MSF)从入门到实战(二)

Metasploit Framework&#xff08;MSF&#xff09;从入门到实战&#xff08;一&#xff09;_安装msf更新-CSDN博客 MSF模块介绍 MSF有7个模块&#xff0c;分别对下面目录下的7个子文件夹&#xff1a; auxiliary&#xff08;辅助模块 &#xff09; show auxiliary //查看所有…

vue视图不刷新强制更新数据this.$forceUpdate()

在vue中&#xff0c;更新视图数据&#xff0c;不刷新页面&#xff0c;需要强制更新数据才可以 前言 在对数据就行添加和删除时&#xff0c;发现页面视图不更新&#xff0c;排除发现需要强制更新才可以 点击添加或删除&#xff0c;新增数据和删除就行&#xff0c;但在不使用fo…