HTTPS安全防窃听、防冒充、防篡改三大机制原理

前言

        本文内容主要对以下两篇文章内容整理过滤,用最直观的角度了解到HTTPS的保护机制,当然啦,如果想要深入了解HTTPS,本文是远远不够的,可以针对以下第一个链接中的文章拓展板块进行学习,希望大家通过本文能够对HTTPS有一个初步的认识,

你真的了解HTTPS吗?(一) - HTTPS和加密 - 知乎 (zhihu.com)

1.5 万字 + 40 张图解 HTTP 常见面试题 - 知乎 (zhihu.com)

HTTPS

HTTPS公认的三大优势有:

  1. 数据加密,防窃听:HTTPS中的对称加密和非对称加密
  2. 身份验证,防冒充:HTTPS的CA和证书
  3. 完整性校验,防篡改:HTTPS的哈希

HTTPS混合加密——防窃听

HTTPS 采用的是对称加密非对称加密结合的「混合加密」方式:

  • 在通信建立前采用非对称加密的方式交换「会话秘钥SK」,后续就不再使用非对称加密。
  • 在通信过程中全部使用对称加密的「会话秘钥SK」的方式加密明文数据。

img

HTTPS为什么同时要有对称加密和非对称加密两种加密方式?
  • 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高
  • 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢

        解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通,这种设计同时兼顾了安全和效率

HTTPS对称加密的密钥SK如何产生和传输?

HTTPS分为2个过程

  1. 协商对称加密密钥SK的非对称加密阶段,称为TLS握手阶段
  2. 使用SK对数据(对话内容)进行对称加密的阶段,称为数据通信阶段

TLS握手阶段

产生对称密钥SK,主要基于三种常见的办法:

  • 基于非对称加密算法
  • 基于专用密钥交换算法,常见有DH、ECDH等
  • 基于共享的secret,常见有PSK,SRP等

数据通信阶段

        发送端首先用密钥SK对通信内容 + 通过摘要算法算出明文的「指纹」一同进行对称加密,接着通过网络传输出去;服务端收到数据后,用SK先将数据解密出明文,通过摘要算法算出明文的「指纹」,通过比较客户端携带的「指纹」和当前算出的「指纹」做比较,若「指纹」相同,说明数据是完整的。

image.png

HTTPS的有几套非对称加密?目的是什么?是否可以省略?

直接给出答案:2套非对称加密

        第一套用于协商对称加密密钥SK第二套用于数字证书签名加密。这两者的区别是:前者是服务器端(如果是双向验证的话,客户端也会有一套非对称加密公私钥)产生的。私钥在服务端上;后者是CA机构产生的,私钥在CA机构那边。并且,这2套都不可以省略。(这个说法略不严谨,但是在实际操作中,确实都不建议省略。)


HTTPS数字证书——防冒充

        在 HTTPS/TLS 协议中,客户端和服务器都有一份公钥和私钥。客户端会首先发起连接请求,服务器会将自己的公钥发送给客户端。客户端接收到公钥之后,会使用该公钥对信息进行加密,并将密文发送给服务器。在接受到加密信息的服务器端,会使用该服务器私钥(不是客户端私钥)对密文进行解密,得到原始信息。这就存在些问题,如何保证公钥不被篡改和信任度?

所以这里就需要借助第三方权威机构 CA (数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。主要依赖于一个“防伪标识” — 数字签名

        数字签名生成过程是首先对原文作哈希,把一段不定长的文本映射成固定长度的字符空间,接着再用CA机构的私钥对这段定长字符做加密。大大提高了整体的运算效率。

申请证书

        用户向CA机构提交自己的信息(如域名)和公钥(用于TLS握手阶段),CA机构利用的自己的私钥对其加密生成数字证书,通过数字证书的方式保证服务器公钥的身份,解决冒充的风险。

验证证书

        接受证书的一端先对除数字签名外的其他部分做一次相同的哈希算法(证书中指明了哈希算法),得到这段文本的哈希映射,记作H1;获取CA机构的公钥对数字签名属性做解码,得到了CA机构计算出的哈希映射,记作H2。对比H1和H2两个字符串是否严格相等,若是,代表该证书的信息未被篡改,证书有效;否则,证书内容被篡改,证书无效。 若证书有效,接受端会再进行对端的身份校验(验证域名) ,若身份验证通过,接收端会拿证书上的公钥加密接下来整个TLS握手阶段的会话密钥SK之后,发送给服务端。然后在服务端用私钥进行解密出SK

image.png

CA的公钥已事先置入到了浏览器或操作系统里


HTTPS的哈希——防篡改

        在数据通信阶段,SSL/TLS会对原始消息(message)做一次哈希,得到该消息message的摘要,称为消息摘要(Message Digest) 。对端接受到消息后,使用协商出来的对称加密密钥解密数据包,得到原始消息message;接着也做一次相同的哈希算法得到摘要,对比发送过来的消息摘要和计算出的消息摘要是否一致,可以判断通信数据是否被篡改。


总结:HTTPS通信流程

SSL/TLS 协议基本流程:

  • 客户端向服务器索要并验证服务器的公钥。
  • 双方协商生产「会话秘钥」。
  • 双方采用「会话秘钥」进行加密通信。

前两步也就是 SSL/TLS 的建立过程,也就是 TLS 握手阶段

SSL/TLS 的「握手阶段」涉及四次通信

  1. 客户端向服务器发起加密通信请求,也就是 ClientHello 请求。该请求中主要内容有客户端支持的SSL/TLS版本 + 一个随机数
  2. 服务器确认 SSL/ TLS 协议版本,如果浏览器不支持,则关闭加密通信。反之向客户端发出响应,也就是 SeverHello。该请求中主要内容有CA数字证书 + 一个随机数
  1. 客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:

    (1)一个随机数

    (2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。

    (3)之前所有内容的发生的数据做一次哈希,得到消息摘要

    客户端通过这三个随机数用双方协商的加密算法,各自生成本次通信的「对称会话秘钥」

  1. 校验消息摘要,通过后服务器也基于这三个随机数生成本次通信的「对称会话秘钥」,再返回去一个响应给客户端

    (1)表示随后的信息都将用「会话秘钥」加密通信。

    (2)之前所有内容的发生的数据做一次哈希,得到消息摘要,给客户端进行校验

img

        至此,整个 SSL/TLS 的握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用「会话秘钥」加密内容。

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

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

相关文章

WAT、CP、FT的概念及周边名词解释

CP是把坏的Die挑出来,可以减少封装和测试的成本。可以更直接的知道Wafer 的良率。 FT是把坏的chip挑出来;检验封装的良率。 现在对于一般的wafer工艺,很多公司多把CP给省了,减少成本。 CP对整片Wafer的每个Die来测试&#xff0…

光伏系统方案设计的注意点

随着太阳能技术的日益发展,光伏系统已经成为一种重要的可再生能源解决方案。然而,设计一个高效、可靠的光伏系统需要考虑到许多因素。本文将探讨光伏系统方案设计的注意点,包括系统规模、地理位置、组件选择、系统布局和运维策略。 系统规模 …

C++ 模拟实现string类

目录 一、类的定义 二、初始化&销毁 1、构造函数 2、辨析三种定义 3、析构函数 三、赋值 1、拷贝构造函数 2、赋值运算符 四、成员访问 operator[ ] 五、比较大小&判断相等 六、容量操作 1、size() 2、reserve 3、push_back 4、append 5、加等运算符…

onnx检测推理

起因:当我想把检测的onnx模型转换到特定的设备可以使用的模型时,报错do not support dimension size > 4,onnx中有些数据的维度是五维,如图。本文使用的是edgeyolo,它使用的是yolox的head,最后的输出加上…

gmid方法设计五管OTA二级远放

首先给出第一级是OTA,第二级是CS的二级运放电路图: gmid的设计方法可以根据GBW、Av、CL来进行电路设计,因此在设计电路之前需要以上的参数要求。 1、为了满足电路的相位裕度至少60,需要对GBW、主极点、零点进行分析。 首先给出其…

应用程序无法找到xinput1_3.dll怎么办,xinput1_3.dll 丢失的解决方法

当电脑系统或特定应用程序无法找到或访问到 xinput1_3.dll 文件时,便会导致错误消息的出现,例如“找不到 xinput1_3.dll”、“xinput1_3.dll 丢失”等。这篇文章将大家讨论关于 xinput1_3.dll 文件的内容、xinput1_3.dll丢失问题的解决方法,以…

查收查引(通过文献检索开具论文收录或引用的检索证明)

开具论文收录证明的 专业术语为 查收查引,是高校图书馆、情报机构或信息服务机构提供的一项有偿服务。 因检索需要一定的时间,提交委托时请预留足够的检索时间。 一般需要提供:论文题目、作者、期刊名称、发表年代、卷期、页码。 目录 一、查…

MIT6.5840-2023-Lab1: MapReduce

前置知识 MapReduce:Master 将一个 Map 任务或 Reduce 任务分配给一个空闲的 worker。 Map阶段:被分配了 map 任务的 worker 程序读取相关的输入数据片段,生成并输出中间 k/v 对,并缓存在内存中。 Reduce阶段:所有 ma…

QT 中基于 TCP 的网络通信 (备查)

基础 基于 TCP 的套接字通信需要用到两个类: 1)QTcpServer:服务器类,用于监听客户端连接以及和客户端建立连接。 2)QTcpSocket:通信的套接字类,客户端、服务器端都需要使用。 这两个套接字通信类…

位运算在查找重复元素中的妙用

关卡名 用4KB内存寻找重复元素 我会了✔️ 内容 1.理解如何用4KB内存寻找重复元素 ✔️ 本关所有题目的重点都是理解如何解决就好,面试问的时候能够将问题描述清楚,不用写代码。 在海量数据中,此时普通的数组、链表、Hash、树等等结构有…

《当代家庭教育》期刊论文投稿发表简介

《当代家庭教育》杂志是家庭的参谋和助手,社会的桥梁和纽带,人生的伴侣和知音,事业的良师益友。 国家新闻出版总署批准的正规省级教育类G4期刊,知网、维普期刊网收录。安排基础教育相关稿件,适用于评职称时的论文发表…

mybatisplus自动填充属性值

MetaObjectHandler: 是mybatisplus提供的一个接口,,,这个接口定义了在执行插入和更新操作的时候的回调方法,,,允许你自定义实体对象的一些属性值,,比如: createTime,createBy,update…

java中static关键字的作用是什么?

在Java中,static 是一个关键字,它可以用来修饰类的成员变量、成员方法和内部类。static 的作用主要有以下几个方面: 静态变量(Static Variables): 当变量被声明为static时,它变成了类的静态变量…

今天面试招了个25K的测试员,从腾讯出来的果然都有两把刷子···

公司前段时间缺人,也面了不少测试,前面一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在15-25k,面试的人很多,但平均水平很让人失望。看简历很多都是4年工作经验,但面试中,不…

OkGo导入失败解决办法

jcenter()maven { url "https://jitpack.io" }再同步就可以了

罗马数字转整数算法(leetcode第13题)

题目描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …

微服务主要特点Java微服务开发的关键技术

【点我-这里送书】 本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(…

c++ atmoic acquire/release

由于多核cpu缓存的存在,以及gcc编译优化,cpu指令层面的优化,导致程序的执行顺序可能跟你写的顺序不完全一致(reorder)。 但是在多线程编程中如何确保各个线程能正确的读取到各个变量呢(而不是cache中老旧的…

【Vue3从入门到项目实现】RuoYi-Vue3若依框架前端学习——登录页面

若依官方的前后端分离版中,前端用的Vue2,这个有人改了Vue3的前端出来。刚好用来学习: https://gitee.com/weifengze/RuoYi-Vue3 运行前后端项目 首先运行项目 启动前端,npm install、npm run dev 启动后端,按教程配置…