https之数字证书分析

news2024/11/23 20:19:27

写在前面

当我们要给网站配置https时,都需要申请 一个数字证书,然后将数字证书配置在网站上,如下可能配置:

<Connector port="446" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
               scheme="https" secure="true" maxThreads="1500" minSpareThreads="500" maxSpareThreads="800" acceptCount="2000" enableLookups="false" 
               clientAuth="false" SSLProtocol="TLSv1.2"  URIEncoding="utf-8" keystoreFile="D:\program_files\apache-tomcat-7.0.106-windows-x64-9999\apache-tomcat-7.0.106\conf\jc6server.jks" keystorePass="123456" />

本文就一起来看下,这个数字证书到底是什么?为什么必须要配置数字证书?

1:正戏

Bob和Alice是好朋友,Eve是一个坏人,总是要想方设法破坏Bob和Alice的友谊,假定Bob想要约Alice出去玩,于是给Alice发送了如下消息:

在这里插入图片描述

但,我们知道,可恶的Eve出手了,从中做鬼,他拦截了Bob发送给Alice的消息,并进行了恶意修改,如下:

在这里插入图片描述

这样Alice收到了错误的消息,最终在错误的时间去到了错误的地点来等待他的好朋友Bob赴约,但,很明显,Alice是等不到Bob的。这很可能会影响到Bob和Alice的友好关系,那么能不能不让这种情况发生呢,是可以的,需要注意这种情况的原因是发送的消息是明文的,坏蛋Eve可以很轻松的拦截到并修改,因此,我们只需要发送加密消息就可以了,这里我们先使用对称加密,Bob将自己的公钥发送给Alice,这样Bob再发送消息的话就可以使用秘钥加密,然后Alice使用秘钥解密了,如下图:

在这里插入图片描述

看起来非常的完美,但真的是这样吗?很明显不是,我们要考虑这个对称加密的秘钥也是通过明文发送给Alice的,因此,这个过程很有可能被坏蛋Eve截获,Eve一旦有了秘钥就又能够堂而皇之的冒充Bob给Alice发送消息了,如下图:

在这里插入图片描述

可想而知,当Alice收到这个你是个大坏蛋,我不要和你玩!的消息就要伤心死了,为了不让Alice伤心,我们需要继续升级。出现这个问题的原因是,Alice无法识别这个消息到底是不是Bob发的,那么只要能够让Alice有办法证明自己的身份就行了,这时候就需要我们的非对称加密算法了,Bob生成非对称加密的私钥(Bob独有)和公钥(公开的),然后将公钥发送给Alice,之后在发送消息的时候,Bob使用自己的私钥对消息内容进行加密生成加密数据(这个加密数据就是数字签名,唯一证明,可以对比人类的指纹或者公章),如果中途Eve搞鬼,则Alice将无法正常解密数据(如RSA公钥解密错误密文会抛出异常javax.crypto.BadPaddingException: Decryption error),这样Alice就知道这不是Bob了,如下图:

在这里插入图片描述

到这里是不是就没有问题了呢,其实还是有的,问题依然出现在Bob明文传输自己生成的公钥上,此时,如果Eve足够聪明,会截获,然后将自己生成的公钥发送给Alice(这时候就可以使用自己的私钥来发送消息给Alice了),这样的话,因为Alice无法对Bob的消息验签,Bob反而不是Bob了,而不是Bob的Alice反而成了Bob了,那我们只要对公钥也加密传输不就完了吗?但要传输这个加密公钥就需要Alice现有这个加密公钥,不然解不了密(验签需要公钥),而Alice要有这个加密公钥就需要加密传输,如下图:

在这里插入图片描述

完蛋,死循环了,这种证明你妈是你妈的问题还真是不太好搞的,此时该怎么办,破局的方式就是引入一个可靠的第三方,有它来提供可靠的公钥和私钥,利用此公钥和私钥,来完成Bob的公钥传输给Alice的工作,则死循环变为下图:

在这里插入图片描述

这里的三方就是CA(Certificate Authority)机构,公钥和私钥是以文件的形式发放的,这个文件就叫做数字证书,如下我们可以查看百度的公钥数字证书:

在这里插入图片描述

这个时候,Bob就可以用自己的私钥来加密消息,生成签名并给Bob传递消息了,但还有一个问题需要解决,那就是这个私钥加密的过程会涉及到复杂的计算过程,如果是Bob发送给Alice的消息很大的话,加密的效率可能会比较低,为了解决这个问题,需要将消息转换为一个较小长度的字符串(如MD5生成长度固定为218bit的字符串),然后再对该字符串加密生成加密消息,即数字签名,如下图:

在这里插入图片描述

其中这个经过原始消息转换而成的固定长度的字符串我们叫做是摘要,除了生成数字签名之外,一般还会用来验证文件的完整性。

写在后面

小结

本文以明文传输为切入点,通过引入不同的问题,逐步介绍了,对称加密,非对称加密,摘要,数字签名,数字证书等内容。希望本文能够帮助到你。

参考文章列表

数字签名、数字证书与HTTPS是什么关系? 。

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

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

相关文章

TCP的三次握手 四次挥手 和相关问题

TCP 三次握手 四次挥手 tcp在传输层 tcp&#xff1a; tcp报文&#xff1a; 三次握手&#xff1a; tcp 其中也涉及到了状态的切换 利用了这种状态保证了建立连接和断开连接的逻辑 两次握手不可&#xff1f; 第一个解释: 这个问题的本质是, 信道不可靠, 但是通信双发需要就某个…

var const let

菜鸟学前端 本文&#xff1a;https://www.jianshu.com/p/b7116525273b 文章目录varlet和const写不动了参考说实话&#xff0c;在看到这个之前&#xff0c;我只知道 var&#xff0c;以前也只用过这玩意。 后面那俩都不知道是干啥用的。 感谢同桌的提示。 记&#xff01; var v…

LR2023磨皮滤镜插件Portraiture4最新版

Portraiture4是一款智能磨皮的滤镜插件&#xff0c;该插件能够给Photoshop和Lightroom添加智能磨皮美化功能&#xff0c;可以帮助用户快速对图片中的人物的皮肤、头发、眉毛等部位进行美化&#xff0c;省去了手动调整的麻烦&#xff0c;大大提高P图的效率。Portraiture这是一款…

【线下沙龙】如何用项目管理的思维经营自己的生活

为什么自己参加那么多的学习&#xff0c;也没有过好自己的人生&#xff1f;这个问题出在哪里&#xff1f; 你勾画过自己未来的生活吗&#xff1f; 你没有渴望过的东西会出现在你的生活里吗&#xff1f; 如何实现自己想要的生活&#xff1f; 有一个全球性的调查问卷&#xff1a;…

IDEA运行IAM3.0的管理后台项目(WAR包运行)

1、查看打包方式 远程仓库拉取最新代码 首先查看项目打包方式&#xff0c;为war说明是在容器中运行的。 2、修改数据库配置 将数据库配置修改为本机配置&#xff0c;一般有一个properties配置文件&#xff0c;避免启动之后发现数据库不对又得重启。 3、 系统环境配置 Ct…

【前端笔试题一】:解析url路径中的query参数

前言 本文记录下在笔试过程中的前端笔试编程题目&#xff0c;会持续更新 1. 题目&#xff1a; 解析 url 路径中的 query 参数&#xff0c;比如&#xff1a;‘http://building/#/skeleton?serialNumber2023020818332821073&jobNo210347&target%7B%22a%22%3A%22b%22%2C…

Spring6—JdbcTemplate基础

JdbcTemplate是Spring提供的一个JDBC模板类&#xff0c;是对JDBC的封装&#xff0c;简化JDBC代码。 可以让Spring集成其他的ORM框架:Mybatis、Hibernate等 环境&#xff1a;JDK17IDEAMavenSpring6JdbcTemplate 环境准备 准备数据库表 新建模板 New Module Maven项…

Spring中更简单的存储和读取Bean

目录 一、存储Bean 1.1 配置扫描路径 1.2 使用注解存储Bean对象 1.2.1 五大类注解 1.2.2 方法注解Bean 二、获取Bean 2.1 属性注入 2.2 setter注入 2.3 构造方法注入 2.4 Resource注解 2.5 同一类型多个Bean报错 一、存储Bean 在xml时代&#xff0c;存储一个Bean对象…

力扣SQL刷题7

1132. 报告的记录 II 题型&#xff1a;表1&#xff0c;对列A分组&#xff0c;在列B满足某种条件下&#xff0c;&#xff08;出现在表2中的列C值个数&#xff09;/(列C个数)的比例&#xff0c; 对A分组各类别中取均值 解答1&#xff1a; select 列A&#xff0c;count(distinct …

Kotlin 面向对象(一)

【文字内容源于《疯狂Kotlin讲义》&#xff0c;代码内容原创】 目录 一、类和对象 1.定义类 2.对象的产生和使用 3.对象的this引用 二、方法详解 1.方法与函数的关系 2.中缀表示法 3.componentN方法与解构 4、数据类和返回多个值的函数 5、在Lambda表达式中结构 三…

PHP反序列化漏洞之pop链2

目录 题目&#xff1a; 题目代码&#xff1a; 分析&#xff1a;代码审计 通过以上分析&#xff0c;最终我们构建这个payload&#xff1a; 结果&#xff1a; 目标达到&#xff01; 题目&#xff1a; 这个题目分析就有难度了&#xff0c;需要掌握php的魔法方法的使用以及调用…

算法刷题打卡第85天:设计一个验证系统

设计一个验证系统 难度&#xff1a;中等 你需要设计一个包含验证码的验证系统。每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime 时刻之后 timeToLive 秒过期。如果验证码被更新了&#xff0c;那么它会在 currentTime &#xff08;可…

你评论,我赠书~【哈士奇赠书 - 13期】-〖Python程序设计-编程基础、Web开发及数据分析〗参与评论,即可有机获得

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

100 行 shell 写个 Docker

作者&#xff1a;vivo 互联网运维团队- Hou Dengfeng 本文主要介绍使用shell实现一个简易的Docker。 一、目的 在初接触Docker的时候&#xff0c;我们必须要了解的几个概念就是Cgroup、Namespace、RootFs&#xff0c;如果本身对虚拟化的发展没有深入的了解&#xff0c;那么很…

java全栈知识点[面试篇](一)

jjava全栈知识点[面试篇]&#xff08;一&#xff09;阻塞与等待的状态转变⭐Synchronized本质上是通过什么保证线程安全的?volatile、synchronized和Lock如何保证可见性⭐Synchronized使得同时只有一个线程可以执行&#xff0c;性能比较差&#xff0c;有什么提升的方法?⭐syn…

Unity 进阶 之 AR/VR 3D空间场景中Laser镭射线拖拽UI实现问题的简单整理

Unity 进阶 之 AR/VR 3D场景中Laser镭射线拖拽UI实现问题的简单整理 目录 Unity 进阶 之 AR/VR 3D场景中Laser镭射线拖拽UI实现问题的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、简单实现步骤 常规拖拽 常规拖拽在3D空间拖拽位置跳动问题 解决…

C++003-C++变量和数据类型2

文章目录C003-C变量和数据类型2C数据类型数据类型及定义数据类型及类型大小浮点数据的使用**题目描述**&#xff1a;求阴影面积**题目描述**&#xff1a;计算园的周长和面积如何取消科学计数法表示浮点数iomanip的作用比较多:布尔变量的使用隐式转换与显式转换**题目描述**&…

JAVA环境变量配置步骤及测试(JDK的下载 安装 环境配置教程)

一&#xff1a;JDK的下载、安装和配置1、输入下载地址&#xff1a;https://www.oracle.com/downloads/往下滑&#xff0c;看到Developer Downloads &#xff0c;点击 java点击 Java (JDK) for Developers选择你想要下载的jdk版本4、 点击 JDK Downloads &#xff0c;往下拉&…

树莓派系统创建指南

无意中发现一个落灰的树莓派 故事便开始了…… 准备工作 树莓派 3B一张大于 8G 的 micro SD 卡一个读卡器HDMI 显示器及连接线、键盘、鼠标等外围设备 系统镜像下载 推荐两个树莓派镜像下载网站 树莓派官方网站&#xff1a;https://www.raspberrypi.com/software/树莓派实…

python+request+pytest+pytest-html集成的API自动化测试框架

对于框架任何问题&#xff0c;欢迎联系我&#xff01; 需要框架源码的&#xff0c;请私聊我&#xff01; 一、框架架构 二、项目目录结构 ├────.gitignore ├────case_utils/ 测试用例相关的工具类&#xff0c;包括HTTP请求封装及用例数据处理&#xff0c;用例文件生…