【学习笔记】SSL证书安全机制之证书验证

news/2024/9/16 18:39:38/ 标签: ssl, 密码学, 哈希算法

前言:每当Client从Server收到一张证书,有2件事Client需要去验证:

  • 证书是否有效?
    • 证书只是文件中的文本
    • Client如何知道内容能够信任?
  • Server是否是证书真正的拥有者?
    • 证书可以公开获取
    • Client如何知道Server是真正的拥有者?

1、证书是否有效?

  • Certificate Authority(须知道CA是证书的实际创造者)
    • 往期内容(《SSL证书里包含的具体内容》)提到过证书包含3个部分(证书数据、签名算法和签名),当CA创建证书时,会将证书数据(如subject、validity、public key等)填到证书中。
    • 之后,CA会创建证书数据所有内容的哈希值(通过哈希算法),如上图1fc616f4...
    • 再然后,CA会用自己的私钥加密这段哈希值,生成的就是签名,如上图ad3a0c30...
    • 之后将ad3a0c30...放置到证书的第三部分,也即签名,这个签名能用来验证证书内容的有效性。
  • Client
    • 需要知道的是,在Client连接到Server前,Client其实已经有了CA的证书(当我们安装浏览器时其实已经安装了,重要的是Client已经有了CA的公钥,该公钥可以用来验证来自CA的所有证书)
    • Client获得了Server的证书
    • 用CA的公钥解密签名,得到一段哈希值H1
    • Client计算证书数据的哈希值H2
      • 如果得到的结果H2和证书签名解密得到的结果H1相同,这就说明证书内容从CA创建它之后没有被修改过

        这也就意味着,如果我们信任CA,其实我们就信任了证书的有效性。

        所以,回答证书是否有效的问题,包含用我们已安装的CA公钥来验证签名。

        以上所讨论的内容是RSA签名证书,而DSA签名证书(只有两步操作,证书生成+证书验证)的过程是类似的。

  • 当CA创建证书时,CA将在证书数据上运行DSA的“证书生成”操作,该操作需要CA的私钥,生成的结果就是签名(这也将被安置于证书的第三部分)。
  • Client之后将在证书签名上运行DSA的“证书验证”操作,该操作需要CA的公钥(客户已经有了),得到的结果是1或0代表True or False,结果如果是1,则表明证书有效。

        一旦证书被验证了,就可以检查以下简单的内容:

  • Validity - 证书是否已到期
  • Subject - 地址栏中的URL和Subject的CN(通用名)是否匹配,或者主体替代名称中的条目(Subject Alternative Name)相匹配
  • 还有一个问题就是证书是否被撤销(Certificate Revoked),因为是不同的过程,将在以后进行讲述

2、Server是否是证书真正的拥有者?

        一般情况下,Client要连接Server,Server会提供自己的证书给Client(假设Server是freessl.cn,那么freessl.cn就是本篇将提到的证书真正的拥有者)。在没有进行SSL连接之前,我们没法阻止钓鱼网站去发送Server的证书给Client,他会伪装自己是freessl.cn,当Client收到了这个证书,证书会表明它是有效的,而这张证书是freessl.cn的,所以Client要验证该证书的时候,就只是检查一下。这就是为什么第二个问题很重要。

  • 要回答这个问题,我们要证明的是Server是否拥有私钥,该私钥匹配证书里的公钥。只有true owner拥有匹配公钥的私钥,钓鱼网站能够伪装说自己有相同的证书,但它没有匹配的私钥。
  • 2种方法:
    • Client Initiated(客户端发起)
      • Client生成随机值(如6d5da73e),然后用服务器的公钥(在证书中)加密这个值(得到3e5f5ff2)
      • 加密后的密文会进行在线传输,那么这个世界上能够拿到3e5f5ff2,并且提取到原始值的,就是Server的私钥(只有True owner才有私钥)
      • Server用自己的私钥解密密文,然后提取出原始值(6d5da73e)
      • 现在双方都有了相同的值,但现在Server不能简单地将解密后的值在线传回给Client,并以此来证明自己可以解密内容(否则任何中间人就可以截取信息并传回Client来假装自己是Server)
      • 取而代之的是,值被用来生成会话密钥(Session Keys),它们是对称密钥,用来保护在Client和Server之间的批量数据传输
      • 方法是,当Client发送应用程序数据给Server时,会用会话密钥来进行保护;然后Server会用会话密钥解密接收到的应用数据。这就表明,Server拥有和Client相同的会话密钥,也就是说Server有着相同的初始值(6d5da73e)来创建会话密钥;同时也表明,Server能够用自己的私钥提取出初始的随机值。这也就向Client表明,该Server是证书的真正拥有者。
    • Server Initiated(服务器发起)
      • 在某些时候进行SSL握手时,Server必须要发送一个值(随机值b87c20db)给Client
      • 在线传输这个值(b87c20db)之前,Server会用自己的私钥来给这个值进行签名
      • 之后该签名以及值会在线传输给Client,然后Client会用Server的公钥来验证该签名,如果签名正确,那就告诉我们,唯一能加密该签名的(能够用公钥验证)就是拥有私钥的人。因此,该Server一定是证书的真正拥有者。
      • 那么,万一这个值像上面一样,被用来生成会话密钥,但这个值是以明文形式在线传输的。我们所做的是签名,签名提供不提供保密性(Confidentiality),只提供完整性(Integrity)和真实性(Authentication)。所以,任何正在聆听的人都能得到该值(b87c20db)的副本。因而,我们不能直接用该值来生成会话密钥。
      • 取而代之,该值需要与其他值(只有Client和Server知道)结合起来,来生成会话密钥
      • 我们发现,第二个方法的值是间接使用的(与其他值结合起来使用),而第一个方法则是直接使用

总结:

关于RSA、DH、DSA更多详情,请看《SSL证书之RSA、Diffie-Hellman和DSA》

  • 我们使用方法1或者方法1,取决于我们想要用什么协议来提供Authentication,什么协议来提供Key Exchange
  • 注意到方法1提到,用公钥加密,私钥解密,唯一能做到的非对称加密协议就是RSA。意味着,如果Client想要用RSA进行Authentication,用RSA来进行Key Exchange,Client就要执行方法1
  • 方法2提到签名,我们注意到有2个协议和签名有关,即RSA和DSA。意味着,如果Client和Server决定用RSA或者DSA来提供Authentication,就要执行方法2
  • 方法2重要的是有Key Exchange,有2个协议(RSA、DH)提供密钥交换。RSA的密钥交换包含公钥加密/私钥解密,那我们注意到方法2没有提到加密,因而,我们不能用RSA来作密钥交换,我们可以用DH来进行密钥交换。
  • 方法2的随机值其实不是随机值,它其实是Diffie-Hellman公钥(回顾下,在DH中,双方公开分享数据,并将其与只有他们知道的值相结合,来达到分享秘密的目的),这个secret就是用来生成会话密钥的
  • 因此,决定选择方法1或者方法2,取决于Key Exchange。如果要选RSA作密钥交换,我们可以选择方法1;如果选择DH作密钥交换,我们可以选择方法2。
  • 此外,2种方法都提供了Authentication和Key Exchange,而Authentication回答了Server是否是true owner的问题

参考文献

1、网站:Practical Networking.net:Practical TLS


http://www.ppmy.cn/news/1521811.html

相关文章

rsync搭建全网备份

rsync搭建全网备份 1. 总体概述1.1 目标1.2 简易指导图1.3 涉及工具或命令1.4 环境 2. 实施2.1 配置备份服务器2.2 备份文件准备2.3 整合命令2.4 扩展功能 1. 总体概述 1.1 目标 本次搭建目标: 每天定时把服务器数据备份到备份服务器备份完成后进行校验把过期数据…

代码随想录 -- 二叉树 -- 二叉树的最小深度

111. 二叉树的最小深度 - 力扣(LeetCode) 思路:递归调用 递归返回值:返回以当前节点为根节点的二叉树的最小深度 递归出口:当根节点为空时,返回 0 单层递归逻辑:特殊情况处理:当…

【区块链 + 人才服务】区块链教学管理平台 | FISCO BCOS应用案例

面对传统教育行业存在的教育过程难监督、教育信息不公开、教育效果难认定、教务管理缺抓手、数据造假和证 书局限性等诸多痛点问题。北京奕江科技有限公司基于 FISCO BCOS 底层开发区块链教学管理平台,搭建区块链 教学管理系统、区块链课程学习及实训环境&#xff0…

HTTP中常用的4种请求方式——前端如何发送?后端怎么接受?

一.Get请求: 1.什么是Get请求? 2.前后端如何使用Get交互? 2.1.Query参数格式的Get请求 2.2.Path参数格式的Get请求 二.Post请求: 1.什么是Post请求? 2.前后端如何使用Post交互? 三.Put请求&#xf…

C语言代码练习(第十五天)

今日练习: 37、输入连个正整数 n 和 m ,求其最大公约数和最小公倍数 38、请编程序将“China”翻译成密码,密码规律是:用原来的字母后面第4个字符代替原来的字母 39、设半径 r 1.5,圆柱高 h 3,求圆周长、圆…

优化 spring boot 的启动速度

优化Spring Boot应用的启动速度可以采取以下几个策略: 最小化依赖:检查项目是否有不必要的依赖,特别是那些启动时不使用的库。使用spring-boot-starter-web而不是spring-boot-starter-tomcat可以减少一些默认依赖。 懒加载组件:使…

Linux中Ubuntu系统安装Windows得字体

背景 安装了geoserver 然后geoserver中需要用到微软雅黑字体 所以需要安装一下Linux系统安装Windows中的字体 创建字体目录 cd /usr/share/fonts/ mkdir winfont在Windows找到对应字体 C:\Windows\Fonts 复制该字体到桌面 Linux系统中上传字体 roottest-server03:/usr/sha…

【知识图谱】4、LLM大模型结合neo4j图数据库实现AI问答的功能

昨天写了一篇文章,使用fastapi直接操作neo4j图数据库插入数据的例子, 本文实现LLM大模型结合neo4j图数据库实现AI问答功能。 废话不多说,先上代码 import gradio as gr from fastapi import FastAPI, HTTPException, Request from pydantic…

APP长文本内容编辑器功能实现方案

背景 CSDN APP 中原有编辑器页面为纯H5适配,整体用户交互体验差,如何优化APP端编辑器用户体验是我们团队需要思考的问题。下面我们以iOS为例展开讨论。 一、方案调研 我们分析了几款国内内容发布的APP,如知乎、今日头条、简书,…

谷歌的 GameNGen:无需游戏引擎,人工智能模拟 “毁灭战士“,开辟新天地

谷歌公司的研究人员创建了一个神经网络,可以在不使用传统游戏引擎的情况下生成经典射击游戏《毁灭战士》的实时游戏,从而实现了人工智能领域的一个重要里程碑。这个名为 GameNGen 的系统标志着人工智能向前迈出了重要一步,它能在单芯片上以每…

淘客APP的前后端分离架构设计

淘客APP的前后端分离架构设计 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的软件开发中,前后端分离架构已经成为了一种主流的设计模式。这种架构模式将前端和后端的职责明…

[论文笔记] LLaVA

一、LLaVA 论文中的主要工作和实验结果 Existing Gap: 之前的大部分工作都在做模态对齐,做图片的 representation learning,而没有针对 ChatBot(多轮对话,指令理解)这种场景优化。 Contribution: 这篇工作已经在 BLIP-2 之后了,所以 Image 的理解能力不是 LLaVA 希望提升…

0902,DEQUE,LIST,VECTOR

目录 01_vector.cc 02_vector.cc 作业 01STL包括哪些组件?各自具有哪些特点? 02 序列式容器包括哪些?他们之间有哪些异同? 03 下面程序有什么错误? 04 创建和初始化vector的方法,每种都给出一个实例…

OpenCV Jet颜色映射和HSV颜色空间对比

目录 一、概述 二、Jet颜色空间映射 2.1优势 2.2颜色变化范围 2.3应用场景 三、HSV 颜色空间 3.1优势 3.2颜色分布 3.3应用场景 四、Jet与HSV区别 4.1对比总结 4.2选择建议 OpenCV图像处理与应用实战算法汇总地址: OpenCV 图像处理应用实战算法列表汇总…

Elasticsearch 再次开源

作者:来自 Elastic Shay Banon [D.N.A] Elasticsearch 和 Kibana 可以再次被称为开源了。很难表达这句话让我有多高兴。我真的激动得跳了起来。Elastic 的所有人都是这样的。开源已经融入我的 DNA,也融入了 Elastic 的 DNA。能够再次将 Elasticsearch 称…

电脑回收站被清空,怎么恢复丢失数据?

回收站,这个看似不太起眼的电脑功能,实际上在关键时刻能够为我们挽回重大损失,帮助我们重新获得至关重要的文件和数据。对于经常与电脑打交道的朋友们来说,当某个文件被不小心删除时,回收站往往成为我们文件找回和恢复…

【实战案例】项目经理和产品经理高效配合的秘诀:产品与项目关联

最近,不断收到关于项目经理岗位以及产品经理岗位相关的提问,比如: “产品经理和项目经理,有什么区别?” “产品经理和项目经理,哪个发展前景更好?” “产品经理和项目经理发生冲突&#xff0…

开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布

开源云原生数据库PolarDB PostgreSQL 15兼容版正式发布上线,该版本100%兼容开源PostgreSQL 15。PolarDB是阿里云自研云原生关系型数据库,基于共享存储的存算分离架构使其具备灵活弹性和高性价比的特性,在开源PostgreSQL很好的性能表现的基础上…

Matlab 并联双振子声子晶体梁结构带隙特性研究

参考文献:吴旭东,左曙光,倪天心,等.并联双振子声子晶体梁结构带隙特性研究[J].振动工程学报,2017,30(01):79-85. 为使声子晶体结构实现范围更宽的多带隙特性,基于单振子型声子晶体结构弯曲振动带隙频率范围窄的局 限,提出了一种双侧振子布置…

监理工程师职业资格考试

根据住房城乡建设部、交通运输部、水利部、人力资源社会保障部关于印发《监理工程师职业资格制度规定》《监理工程师职业资格考试实施办法》(建人规〔2020〕3号)文件精神,监理工程师职业资格考试实行全国统一大纲、统一命题、统一组织。 一、…