CA证书及PKI

文章目录

  • 概述
  • 非对称加密
    • User Case: 数据加密
    • User Case: 签名验证
    • 潜在问题
  • CA
    • CA证书的组成
    • CA签发证书流程
    • CA验证签名流程
    • CA吊销证书流程
  • PKI
    • 信任链
    • 证书链

概述

首先我们需要简单对证书有一个基本的概念,以几个问题进入了解

证书是一种电子文档(可以理解为网络世界的身份证),用于在通信双方时验证对方的身份,它包含了证书持有者的信息,公钥以及由可信第三方(称为证书颁发机构,CA)对这些信息的数字签名

在这里插入图片描述

证书的在网络安全通信中作用极大:

  • 身份验证: 证书用于验证通信双方的身份,通过证书可以确认对方是可信的,从而防止身份伪造和中间人攻击
  • 数据加密:证书包含的公钥用于加密数据,从而确保数据在传输过长中不被窃听和篡改,只有持有相应私钥的接收方来解密这些数据
  • 数字签名:证书用于对数据进行数字签名,以确保数据的完整性和不可否认性。数字签名可以证明数据在传输过程中未被篡改,且签名确实来自签名者
  • 安全通信:证书在安全协议(如SSL/TLS)中起着至关重要的作用。这些协议通过使用证书来建立安全的通信通道,保护数据的机密性和完整性
  • 信任建立:证书通过公钥基础设施(PKI)来建立信任链。根证书由权威的CA签发,任何经过根证书认证的证书都被认为是可信的,从而形成一个信任体系。

非对称加密

非对称加密在证书中扮演了非常重要的角色,甚至可以说是为了非对称加密这瓶醋才包了证书这盘饺子

公钥:可以向任何人公开,发送方使用接收方的公钥来加密消息

私钥:仅归自己所有,不可被公开,接收方使用自己的私钥来解密发送方加密的消息,只有拥有正确私钥的人才能解密由其公钥加密的数据。

在这里插入图片描述

User Case: 数据加密

公钥和私钥在数据加密中使用流程如下,图片十分清晰,我们不再赘述

在这里插入图片描述

User Case: 签名验证

在这里插入图片描述

辅助上图,描述下整体流程(我们以Server代发送方,Client代接收方):

  • Server生成数据签名流程
    1. Server对原始数据(文件或消息)使用Hash函数生成一个固定长度的hash值
    2. Server使用自己的私钥加密hash值
    3. Server添加证书或TimeStamp与hash值一起生产一个数字签名
    4. 发布数字签名
  • Client验证签名流程
    1. Client接受到 原始数据 和 附加的数字签名
    2. Client对 原始数据应用相同的散列函数,生成一个新的hash值 用于与签名中的hash值进行比较
    3. Client使用Server发布的公钥解密数字签名,获得Server端生成的hash值
    4. Client对比两个hash值(Client生产的和Server生产的),如果hash值一致则能确定数据未被篡改

潜在问题

公钥私钥已经保证了一定的安全性

发送者使用数字签名来认证自己

client验证身份后,双方在对称加密和hash算法保护的安全信道上发送消息

例如:如果Server和Client发送数字签名时,数据被中间人截获,导致最终发送给Client的数据是中间人生成的签名怎么办呢?

在这里插入图片描述

解决方案是: 找个三方提前证明下Sender的身份,CA应运而生

在这里插入图片描述

CA

CA全称Certificate Authority,是一个受信的第三方机构,负责管理和签发证书,可类比理解为颁发身份证的官方机构

需要证书的S向CA申请签发证书,CA验证证书申请人S的身份并颁发含有S公钥的证书,然后,CA将使用自己的私钥对颁发的证书进行数字签名,以建立对证书的有效性的信任(即获得证书方可以通过CA签名确认签发机构是否合法)

CA证书的组成

一个证书主要由三大部分组成:申请者与颁发者信息,申请者公钥,CA签名

明文:申请者公钥,申请者的组织信息和个人信息,签发机构CA的信息,证书有效时间,证书序列号等信息

密文:CA数字签名

以下是google签发的一个证书样例:

在这里插入图片描述

CA签发证书流程

以下以Server代证书申请人

申请者生成密钥对
创建证书签名请求CSR
提交CSR给CA
CA验证申请者身份
身份验证通过?
生成证书
CA使用私钥签名证书
分发证书给申请者
发布证书到证书库
拒绝申请并通知申请者
  1. Server生成自己的一对公钥和私钥,私钥一般由Server独自控制和拥有,但某些情况下,私钥可能会在颁发CA控制的硬件安全模块(HSM)中生成并安全存储
  2. Server向CA发送包含其公钥和其他识别详细信息的证书签名请求(CSR)
  3. CA采取措施验证Server的身份和在CSR中申领凭证的权力(如Server的域名是否有效或电子邮件证书的电子邮件地址是否有效),即确认提交的CSR确实由Server创建
  4. CA验证成功Server身份,为Server颁发包含CSR详细信息和公钥的证书。同时CA将使用自己的私钥对颁发的证书进行数字签名,并且将新签证书发布到证书库,以便其他用户和系统能够验证其有效性

CA验证签名流程

以下以Client代证书申请验证人

  1. Client向Server首次建立通信时,Server返回被签发的证书
  2. Client读取证书中相关明文的信息(明文中含有CA签名的Hash算法),Client采用相同的Hash算法计算明文信息的info digest,然后使用CA的公钥解密签名数据,对比证书的加密的info digest,如果一致,则可以确认证书的合法性
  3. Client验证证书相关的域名信息,有效时间等信息
  4. Client会内置安装CA本身的证书信息(由CA自签发),如果CA不被信任,Client找不到对应的CA证书,证书也会判定为非法

CA吊销证书流程

证书超过有效期时,证书就不再有效或不可信,证书持有者或第三方(如系统管理员)就会向CA提交吊销证书请求

CA也会通过自动检测(如发现私钥泄露,证书被滥用等)发起吊销流程

接收吊销请求
验证吊销请求
验证通过?
记录吊销信息
拒绝吊销请求并通知请求方
更新CRL
更新OCSP数据
发布更新后的CRL
通知证书持有者
通知依赖方
  1. CA验证吊销请求的真实性和合法性,可能包括身份验证、关联凭证检查等。

  2. CA在内部数据库中记录证书的吊销信息,包括吊销日期和原因

  3. CA更新证书吊销列表(CRL),将被吊销的证书信息添加到CRL中

  4. CA定期发布更新后的CRL,使依赖方(如客户端、服务器)能够获取最新的吊销信息

  5. CA更新在线证书状态协议(OCSP)响应数据,确保实时查询能够返回最新的吊销状态

  6. CA通知证书持有者其证书已被吊销,说明吊销原因和后续步骤

    CA可能通过公告或直接通知相关依赖方,确保其知晓证书吊销信息。

PKI

PKI 全称Public Key Infrastructure, 是一组构成加密框架的技术和流程,可以理解为PKI为减轻CA的负担搭建的一套以CA为核心的服务框架扩展,从而实现更系统化,标准化和大规模管理数字证书

PKI主要包含以下几部分

在这里插入图片描述

  • CA:这里的CA专职颁发,存储和签署数字证书

  • RA:RA分担了原来CA的功能,专门负责审查证书申请者的身份,判断是否同意CA向申请者签发证书

  • VA: Validation Authority, 由于证书具有有效期,VA负责的是证书状态的实时验证,以下简述VA的工作流程

    1. VA定期从CA下载最新的证书吊销列表(CRL)和获取实时证书状态并存储在本地数据库
    2. Client发起证书验证请求(OCSP 在线证书状态协议),请求中包含要验证证书的唯一标识,OCSP请求会发送至VA的OCSP服务器
    3. VA解析请求内容,提取出待验证证书信息,查询本地数据库获取证书状态
    4. 根据查询结果生成OCSP响应并用自己的私钥对响应签名,确保响应的完整性和可信性
    5. 客户端拿到响应,根据证书状态确定下一步操作
    发送OCSP请求
    发送OCSP响应
    有效
    吊销
    未知
    客户端生成OCSP请求
    VA接收并解析请求
    VA查询证书状态
    生成OCSP响应
    VA用私钥签名响应
    客户端接收并验证响应
    证书状态
    继续通信
    中止通信
    安全措施

    CA会定期向VA发送更新的证书撤销清单(CRL)

    接收方会将接收到的证书发送给VA,由VA进行验证证书是否依旧处于有效期

信任链

由于数字证书的广泛应用,CA机构的需求也随之上升,从而引入了中间证书,通俗的理解为 较大的公司(根CA)验证过一些可信的小公司(子CA),授权这些小公司也可签发证书。

PKI中出现了信任链的概念,信任链是指通过一系列信任关系建立的信任路径,从根证书(Root Certificate)到最终用户证书(End-Entity Certificate),信任链的核心思想是,如果你信任链中的每一个证书,那么你就可以信任链中的所有证书。

在这里插入图片描述

信任链所带来的好处:

  • 安全性:根证书至关重要,信任链减少了根证书的直接使用,转而由中间证书来签署最终用户证书,可以降低根证书的风险,增强了整个PKI体系的安全性
  • 灵活性:引入中间证书后,CA可以更灵活地管理和更新证书。如果某个中间证书出现问题或需要更换,只需替换中间证书而不影响根证书和最终用户证书的信任关系。
  • 可扩展性:随着数字证书的应用范围不断扩大,需要不断添加新的证书颁发机构(CA)。信任链的存在使得可以方便地添加新的中间证书,扩展PKI体系而不影响现有的信任结构。
  • 透明性:信任链清晰地展示了证书的层级关系和信任路径,使数字证书的验证过程更加透明和可理解。通过查看证书链,可以了解到证书的签发者和信任关系,从而更好地评估证书的可信度

证书链

证书链是信任链的具体实现,Client在验证证书时,如果认为当前证书不可性,可以从最终用户证书开始,逐级上溯到根证书进行验证。

证书链体现的是证书的层级关系,每一级CA的证书都是由上一级CA签发,最顶层的根证书是自签名的(即自己签发),证书链包括了最终用户证书、中间证书和根证书

在这里插入图片描述

🐖:根证书预安装在客户端操作系统和浏览器中,通常由大型受信任CA签发,如果根证书被信任,所有由其签发的中间证书和最终用户证书也会被信任。

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

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

相关文章

福利|免费申请长期单域名、通配符、多域名SSL证书,不限量

一、什么是单域名、通配符、多域名SSL证书 单域名证书:仅保护一个特定的域名。 通配符证书:保护一个主域名及其所有二级子域名。 多域名证书:在同一张证书中保护多个不同的域名,可以是主域名也可以是子域名,域名之间…

目前比较好用的LabVIEW架构及其选择

LabVIEW提供了多种架构供开发者选择,以满足不同类型项目的需求。选择合适的架构不仅可以提高开发效率,还能确保项目的稳定性和可维护性。本文将介绍几种常用的LabVIEW架构,并根据不同项目需求和个人习惯提供选择建议。 常用LabVIEW架构 1. …

Invalid keystore format,获取安全码SHA1值出错

AndroidStudio版本:Android Studio Electric Eel | 2022.1.1 项目运行JDK版本:11.0.15,查看方法如下: 在Terminal 窗口中,获取的Java版本是:1.8.0,修改Java系统环境变量,改成&#…

如何在MySQL中创建不同的索引和用途?

目录 1 基本的 CREATE INDEX 语法 2 创建单列索引 3 创建多列索引 4 创建唯一索引 5 创建全文索引 6 在表创建时添加索引 7 使用 ALTER TABLE 添加索引 8 删除索引 9 索引管理的最佳实践 10 示例 在 MySQL 中,索引(index)是一种用于…

Git保姆级教程

目录 Git是什么,为什么要学这个工具? 码云注册并创建仓库 Git安装 查看本地仓库状态 添加到暂存区 提交到本地库 修改文件 版本回退 创建、切换和删除分支 合并分支 克隆远端库到本地 将本地库推送到远端库 命令设置别名 Git是什么&#xf…

远程咨询的好处都有哪些呢?

随着科技的飞速发展,远程咨询正逐渐成为人们获取医疗服务的一种新方式。那么什么是远程咨询呢?其又有哪些好处呢?下面就给大家详细地说说。 远程咨询的概念 远程咨询,顾名思义,是指通过互联网技术,实现患…

使用try-catch捕获异常到底会不会影响性能?尤其是try-catch还比较多的情况下?

从字节码层面来看,没抛错两者的执行效率其实没啥差别。 “那为什么网上流传着try-catch会有性能问题的说法啊? 这个说法确实有,在《Effective Java》这本书里就提到了 try-catch 性能问题: 总结: 1、try-catch 相比较…

汇编:数组数据传送

要在32位汇编中实现数组数据的传送,可以使用字符串操作指令 MOVS 以及其前缀 REP,可以高效地复制数组数据。 MOVS 指令是一种字符串操作指令,用于将数据从源地址移动到目标地址。MOVS 指令有不同的变种,可以处理不同大小的数据&a…

水印怎么去除?Windows 上的最佳水印软件

我们都知道,任何水印软件都可以防止您的数字财产被盗。此外,水印是一种虚拟营销元素,可以帮助您推广您的作品。 奇客水印管家是 Internet 上适用于 Windows 7、8 、10 和 11 的最高效的水印软件。此外,它还允许用户通过添加或删除…

【C++】环境搭建及基本工作流程

C 当你需要写性能良好的代码时,C仍是不二选择 如果你想访问硬件、如果你想对硬件进行控制,C仍是首选。 所有的游戏引擎都是用C编写的,因为C可以直接控制硬件。 原理: C代码-->编译器编译comple-->目标平台的机器码-->放…

锂电池危险特性分类鉴别 危险品危险特性分类鉴别报告怎么申请

锂电池危险特性分类鉴别报告的办理流程 锂电池危险特性分类鉴别报告是用于确定锂电池及其产品对应的运输危险品分类,判断是否符合国际公认的危险品分类标准的报告。办理此类报告的流程通常包括以下几个步骤: 提供样品及测试需求:需要提供样品…

16.左侧导航菜单制作

左侧导航菜单制作 1. 修改路由&#xff0c;方便查看页面 index.ts import { RouteRecordRaw, createRouter, createWebHistory } from "vue-router"; import Layout from /layout/Index.vueconst routes: Array<RouteRecordRaw> [{path: /,name: home,comp…

【SpringCloud学习笔记】Elasticsearch

1. Elasticsearch 1.1 安装ES 启动Docker&#xff1a;service docker restart / systemctl restart docker基于Docker创建网络docker network create hm-net向云服务器上传elasticsearch以及kibana的tar包&#xff0c;并使用docker load -i xxx.tar进行加载使用如下命令启动e…

APD系列特高频局放监测装置

安科瑞电气股份有限公司 祁洁 15000363176 一、产品概述 现阶段&#xff0c;电力系统对于电能的质量提出越来越高的要求&#xff0c;不仅要确保供电稳定可靠&#xff0c;而且供电的安全性也是重要要求。电力系统中&#xff0c;金属封闭开关设备得到广泛应用&#xff0c;因…

程序猿大战Python——流程控制——其他控制语句

for循环 目标&#xff1a;掌握for循环的使用。 与while循环功能类似&#xff0c;for语句也能完成反复多次的执行。 for语法&#xff1a; for 临时变量 in 序列:满足条件时&#xff0c;执行的代码1满足条件时&#xff0c;执行的代码2…… [else:当for循环正常执行结束后&#…

简单了解java中的异常

异常 1、异常的概述 1.1、概述 异常就是程序出现了不正常的情况&#xff0c;程序在执行过程中&#xff0c;数据导致程序不正常&#xff0c;最终导致JVM的非正常停止。语句错误不算在异常体系中。 1.2、异常的存在形式 异常有类型之分&#xff0c;比如我们比较熟悉的数组越…

TikTok Shop账号需要防关联吗?

在TikTokShop作为新兴的电商销售渠道中&#xff0c;保护账号的安全和隐私&#xff0c;防止账号关联成为了重要的任务。为了更好地理解为何需要防关联以及如何进行防范&#xff0c;让我们深入探讨一下这个问题。 为什么要防关联&#xff1f; 1. 账号异常风险&#xff1a;防关联…

苹果AI来了,ios18史诗级发布

今天凌晨1点&#xff0c;苹果举行了WWDC开发者大会&#xff0c;正式发布了 全新iOS 18、iPadOS 18、watchOS 11、tvOS 18、macOS 等以及Apple Intelligence的个人化智能系统 苏音给大家汇总下&#xff0c;ios18的更新内容以及苹果的AI。 本次更新&#xff0c;官方带来的title…

HBuilder X运行项目到微信开发者工具调试和发布Uniapp小程序

1.下载和安装 HBuilderX hbuilder首页&#xff1a;https://www.dcloud.io/hbuilderx.html 下载hbuilder编辑器,选择对应的系统,Windows和mac正式版即可,下载后免安装直接点击即可使用。 打开HBuilder之后&#xff0c;它会要求你注册一个用户&#xff0c;然后才可以使用。 …

如何预览XtraGrid控件

如何预览XtraGrid。 private void ShowGridPreview(DevExpress.XtraGrid.GridControl grid) {// Check whether the Grid Control can be previewed.if(!grid.IsPrintingAvailable) {MessageBox.Show("The DevExpress.XtraPrinting Library is not found", "Er…