https访问流程详解

news2024/9/22 23:39:15

1. 基础知识

1.1 https起源

在这里插入图片描述
鲍勃有两把钥匙,一把是公钥,另一把是私钥。

在这里插入图片描述

鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。
在这里插入图片描述

苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。
在这里插入图片描述

鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

在这里插入图片描述

鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。

在这里插入图片描述

然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。

在这里插入图片描述

鲍勃将这个签名,附在信件下面,一起发给苏珊。
在这里插入图片描述

苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

在这里插入图片描述

苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

在这里插入图片描述

复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。

在这里插入图片描述

后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。

在这里插入图片描述

鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。

在这里插入图片描述

苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。

下面,我们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密。

在这里插入图片描述

首先,客户端向服务器发出加密请求。

在这里插入图片描述

服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。

客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。

在这里插入图片描述

如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。
在这里插入图片描述

如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。

1.2 数字签名


签名生成流程:

发送者对消息计算摘要值
发送者用私钥对摘要值进行签名得到签名值
发送者将原始消息和签名值一同发送给接收者
注:1、数字签名技术的本质不是加密,所以和签名值一同传递的消息不是用加密的,当然也可以对消息加密后再计算签名值
2、数字签名算法建议对消息摘要值进行签名,因为摘要值的长度是固定的,运算时候的速度会比较快。
签名验证流程:

接收者接收到消息后,拆分出消息和消息签名值A。
接收者使用公钥对消息进行运算得到摘要值B。
接收者对摘要值B和签名值A进行比较,如果相同表示签名验证成功,否则就是验证失败。
RSA数字签名算法

RSA加密算法是公钥加密,私钥解密;
RSA签名算法是私钥签名,公钥验证签名。

数字签名技术:
密码学中,以PSA密钥对为例,私钥只有密钥对的生成者持有,如果不考虑密钥泄漏的问题,私钥持有者使用密钥签署一条消息,然后发送给任意的接收方,接收方只要拥有私钥对应的公钥,就能成功反解签署消息,由于只有私钥持有者才能“签署”消息,不能抵赖说这条签署消息不是他发送的。

数字签名技术的特点:

防篡改:数字不会被修改
防抵赖:消息签署者不能抵赖
防伪造:发送的消息不能够伪造
 

2.申请证书


提供服务的服务方通过提交关键DN信息向有合法的CA机构申请证书,如阿里云等。也可以自己利用openssl进行自签名,自签名的证书浏览器访问会报错提示。自签名可参考这篇文章(OpenSSL Certificate Authority — Jamie Nguyen),讲述的比较清晰。

容易混淆的一点是,我们平常说的对外公开的一定是证书,证书里面包含公钥。证书采用的是X.509的格式,只要是客户端进行反解证书都可以获得公钥,所以即使自签名的证书也可以通过浏览器访问,只不过浏览器或提示不安全,如果点击继续或者设置为安全,依然可以使用https协议进行通讯。

在这里插入图片描述

 

3. 交互流程


如下图,当用户发起https访问,服务端会返回CA证书(如果是自签名就是返回自签名的证书),浏览器会进行证书解析,首先会判断CA证书是否合法,比如CA机构是否合法,对应的DN信息是否匹配。如果不合法就提示用户,如果合法就获取公钥(这里不需要解密,直接解析即可获取);然后根据公钥进行随机私钥的加密,接着一步一步按照下图流程就行。

在这里插入图片描述

 4. 细节说明

1.CA机构的身份和作用:CA机构是一个可信第三方,常见的大多是有名望的大企业,或者对安全性要求比较高的机构,比如银行。它在这里的主要职责是签发证书,而在实际的服务器与客户机交互阶段,CA机构以“CA证书”的形式参与,而不是CA机构的服务器。如果是后者,可以想见,“几乎全网”的HTTPS请求都要经过“CA机构服务器”,怕是没有哪家服务器扛得住。所以,CS交互期间,可以认为CA机构是离线的;

2.证书的第一职责是验证身份。服务器作为服务提供者,首先要确保自己的身份和安全性,它会向CA机构申请证书,并提供一些基本信息,比如组织名称、国家、地区等:

服务器证书的获取流程:

a.服务器把自己的基本信息打包处理,得到一个签名

b.服务器把自己的签名用自己的私钥(就是一个非对称加密的密码)加密,得到一个公钥(也叫待签名证书);

c.服务器把自己的签名和公钥同时发给CA机构;

d.CA机构通过签名识别服务器的身份后,用自己的私钥对提交过来的服务器公钥进行加密,生成服务器证书并返回;

申请证书这个过程不一定需要提供算法名称,使用什么算法,高版本协议中都是约定好的。生成服务器证书的过程,用一句话概括就是“CA机构(证书签发机构)用自己的证书对申请者(可信服务器)签发了一个证书”。

3.服务器在与客户端交互的时候,把自己的证书发给客户端,向客户端证明自己的身份。客户端通过提前安装的CA证书(包含CA的公钥,人人都可以获取到,保持系统升级即可,一般不需要特意安装)来验证服务端证书的合法性。由于服务端证书是用CA私钥加密的,所以现在可以用CA公钥解密——即非对称加密,这样就实现了服务器签名的验证,所以叫验签。反过来,客户端向服务器证明身份也可以用同样的方式。验证CS双方身份的过程,也是实现HTTPS不可否认/不可抵赖特性的保证。

4.客户端得到的证书有两个:CA证书和服务器证书,即用CA证书来验证服务器证书的合法性,从而证明服务器身份。难道不需要证明客户端身份吗?需要,但一般不需要像服务端那样额外申请一个证书来证明(除了银行业。还记得你的U盾吗,就是个证书),用CA证书中提供的各类算法和后续的握手机制,就可以确保客户端身份,进行安全传输了。

 


参考链接:十分钟搞懂https签名_沉舟已过的博客-CSDN博客_https签名

参考链接:HTTPs的签名相关概念_笙箫声动的博客-CSDN博客_https 数字签名

参考链接:https的数字签名流程_卡乐C前端的博客-CSDN博客_https 数字签名

参考链接:关于本节HTTPS的相关疑惑 马士兵教育官网 - IT职业领路人

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

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

相关文章

jvm-sandbox:基础了解及demo演示

文章目录一、基础准备-被测应用二、代码编写-自定义Module三、jvm-sandbox安装及基础命令四、jvm-sandbox demo演示4.1、改变方法返回4.2、异常注入五、资源链接一、基础准备-被测应用 准备:先创建一个基础的SpringBoot项目并打jar包后在服务器启动 RestControll…

TP5反序列化利用链

说明 该文章来源于同事lu2ker转载至此处,更多文章可参考:https://github.com/lu2ker/ 文章目录说明TP5反序列化利用链下图是Mochazz 大佬画的非常优雅的一张调用链图Action!CUT!TP5反序列化利用链 本文以第二人称视角重点谈谈给…

max蒙皮动画+动作

首先关于max人物动画!如何制作! 首先! 我们要准备一个模型!人物的模型! 这是一个人物模型!obj的!没有任何东西!你也可以选择其他,我是从虚幻里面直接导出的&#xff0…

太卷了,华为某领导说招外包只要985!

你听说过华为od吗?od是outsourcing dispatch(外包派遣)的简称,虽然华为每年会挑选一部分优秀的od员工转为华为正编员工,但od本质上还是外包。最近一位华为员工爆料:太卷了!领导说招od员工也要98…

玻纤效应对skew的影响(二)

玻纤效应对对内skew的影响 参数对对内Skew的影响 在一个差分对中,对内skew是由PN走线Dk的差异造成的。导致Dk有差异的原因有很多,例如走线位置,core和pp的玻璃束位置,走线宽度等等。但是这些因素影响角度也不同,下图…

应用程序已被Java 安全阻止-- 如何全局设置Java 控制面板参数

最近遇到一个客户问题,客户方存在一个使用场景为使用IE访问一个页面 之后通过点击页面的按钮调起一个applet程序,结果遇到了一个弹窗告警:应用程序已被Java安全阻止。 对于这个问题 解决方案有两个: 1.将访问的页面站点加入到例外…

BGP在数据中心的应用2——BGP如何适应数据中心网络

注: 本文根据《BGP in the Datacenter》整理,有兴趣和英文阅读能力的朋友可以直接看原文:https://www.oreilly.com/library/view/bgp-in-the/9781491983416/上一部分笔记请参考:https://blog.csdn.net/tushanpeipei/article/deta…

echarts中得一些使用技巧和方法

一、取数据的最大值: let maxNum maxData.sort((a, b) > b - a)[0]; 二、echarts 自适应 所有的echarts里面设置了字体根据最外层body的字体来改变大小 // app.vue中的代码 // 页面开始加载时修改font-size var html document.getElementsByTagN…

VGG详解

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 ✨完整代码在我的github上,有需要的朋友可以康康✨ https://github.com/tt-s-t/Deep-Learning.git 目录 一、VGG网络的…

小侃设计模式(二十)-迭代器模式

1.概述 迭代器模式(Iterator Pattern)提供了一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。迭代器模式用于访问集合中的元素而不需要知道集合底层的数据形式。在JAVA语言中,迭代器模式已经成为其中不可缺少的…

3000字13张图详细介绍RAID0、1、5、6、10、50、60,非常值得收藏!

RAID简述 RAID 是一种用于提高数据存储性能和可靠性的技术,英文全称:Redundant Array of Independent Disks,中文意思:独立磁盘冗余阵列。RAID 系统由两个或多个并行工作的驱动器组成,这些可以是硬盘或者 SSD&#xf…

力扣刷题记录——344.反转字符串、345.反转字符串中的元音、349.两个数组的交集

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《344.反转字符串、345.反转字符串中的元音、349.两个数组…

Jvm 系列(十二) JVM的执行引擎全面讲解

JVM 执行引擎 1、执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一。 “虚拟机”是相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理机、缓存、指令集和操作系统层面上的,而虚拟机的执行…

国产直流马达驱动芯片SS6216的功能参数以及应用

直流有刷电机驱动芯片SS6216是为消费类产品,玩具和其他低压或者电池供电的运动控制类应用提供了一个集成的有刷电机驱动器解决方案。是为低电压下工作的系统而设计的直流电机驱动集成电路,单通道低导通电阻。具备电机正转/反转/停止/刹车四个功能。 直流…

STL剖析(二):容器底层数据结构及常见用法

一.概述 本文主要聚焦于STL容器,STL完整的容器分类体系如下所示,下文将逐一对各个容器底层的数据结构以及常见用法进行介绍。 测试环境:Ubuntu 22.04 g 11.3.0 二.顺序容器 顺序容器都对应着线性数据结构。 2.1 array array的使用需要引…

6.2 微服务-SpringBoot

目录 6.2.1 SpringBoot 6.2.1.1 什么是Spring Boot 6.2.1.2 SpringBoot的特点 6.2.2 快速入门 6.2.2.1 创建工程 6.2.2.2 引入依赖 6.2.2.3 启动类 6.2.2.4 controller 6.2.2.5 测试 6.2.3 注解与属性注入 6.2.3.1 注解 6.2.3.1.1 EnableAutoConfiguration 6.2.3.1…

leetcode 240. 搜索二维矩阵 II-java题解

题目所属分类 从右上角出发往下遍历 倒是也可以二分 原题链接 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 代码案例: 输入:m…

加解密与HTTPS(4)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~ 在互联网应用中,安全性问题已经越来越突出。从DDoS攻击、矿机劫持、乌云事件(白帽子变成黑帽子),到窃听、偷拍、强…

Word控件Spire.Doc 【Table】教程(1):在 Word 中创建表格-C#VB.NET

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

spring源码-资源资源加载器

Spring资源抽象Resource Spring对各种底层资源,比如文件系统中的一个文件,classpath上的一个文件,或者一个网络URL,统一抽象为接口Resource来表示 因为每个底层文件都可以以一个只读InputStream的方式打开,所以Resource接口继承…