数字证书原理

article/2025/9/18 22:03:46

证书,也叫做数字证书,是网络世界中的“身份证”。证书将持有者的身份信息和公钥关联到一起,保证公钥确实是这个证书持有者的,通过证书就可以确认持有者的身份。证书由权威的、公正的、可信任的第三方机构颁发,我们把证书的颁发机构称为CA(Certificate Authority),相当于现实生活中的公安局。

为什么会有证书这个概念呢?

主要是在非对称加密中,客户端需要获取服务端的公钥信息,但是如果请求被第三方拦截的话,公钥信息就可能被替换,会导致客户端用第三方的公钥进行加密,交互信息存在泄露的风险(谁也不想自己的银行卡密码被泄露)。因此,引入证书,用于鉴别服务端的身份。如果服务端的身份鉴定失败,那么就终止请求。

那么证书的原理是什么呢?

证书颁发给使用者后,使用者就会拿着证书到处证明自己的身份。如果我们收到了一个这样的证书,怎么才能判断这个证书就是合法的,不是伪造的呢?证书中存储的有签名信息,假设交互的双方是A和B。A收到了B发过来的证书,想要验证这个证书的真伪,通过如下步骤:

1. A首先需要获取到为B颁发证书的那个CA的公钥,用这个公钥解密证书中的签名,得到摘要信息1

2. A使用证书中签名算法里面的HASH算法对证书进行HASH计算,得到一个摘要信息2。

3. A将摘要信息1和摘要信息2进行对比,如果两者一致,就说明证书确实是由这个CA颁发的(能用CA的公钥解密说明该CA确实持有私钥),并且没有被篡改过,该证书没有问题。

当然,也会同时检查证书是否在有效期内。

上述过程存在两个问题:

1. CA的公钥如何获取

2. 如何验证CA的证书是否被篡改及身份

对于问题1:B的证书中含有为B颁发证书的CA的信息,A通过该信息请求CA的证书,CA的证书中含有CA的公钥。

对于问题2:验证CA证书是否被篡改及CA的身份和A验证B的证书和身份的原理一样,首先通过摘要信息进行判断,然后找为CA颁发证书的上层CA,通过这种一层一层的方式验证身份。那么,什么时候这个验证过程才会停止呢?直到找到一个可信的CA或者验证出现了错误。操作系统中一般都会安装一些根证书,在进行身份验证的时候,如果在操作系统的根证书中验证了CA的身份,那么验证过程就可以终止了。

PS:12306网站之前是自己给自己颁发证书,众多浏览器都会提醒用户该网站不安全。

A使用CA的证书验证B的证书的过程如下图所示。

如果通信双方要互相验证对方的证书,那就要分别获取到为对方颁发证书的CA的证书。如下图所示,A如果要验证B的证书,则A必须先获取为B颁发证书的CA的证书,用CA的证书验证B的证书;B如果要验证A的证书,则B必须先获取为A颁发证书的CA的证书,用CA的证书验证A的证书。如果A和B是由同一个CA颁发的证书,那么两者获取到的CA的证书是相同的,如果A和B是由两个不同的CA颁发的证书,那么两者获取到的CA的证书是不同的。

证书属性

公钥是通过证书来向外界公开分发的,证书中必然会含有持有者的公钥信息。X.509 v3规范的证书格式中包含的关键信息如下:

l  签名算法:生成该证书的签名时所使用的HASH密码学算法和公钥密码学算法。

2  颁发者:谁颁发了这个证书,即CA的名称(验证者通过该字段去获取CA的证书)

3  主题:该证书时颁发给谁的,即证书持有者的名称。

4  公钥信息:证书持有者的公钥信息。

5  签名:CA对该证书的签名,又叫做CA的指纹信息。

证书颁发

CA颁发证书的过程如下图所示:

首先,CA使用签名算法中的HASH密码学算法(如SHA1)生成证书的摘要信息,然后使用签名算法中的公钥密码学算法(如RSA),配合CA自己的私钥对摘要信息进行加密,最终形成签名。

证书颁发方式

为网络中设备(电脑、网站、防火墙)生成证书有两种方式:

1. 先在设备上生成公私秘钥对,然后将公钥信息及设备信息提供给CA,CA根据这些信息生成证书

2. CA直接为设备生成公私秘钥对,然后为设备生成证书,最后将生成的公私秘钥对及证书导入设备中

常见的证书存储格式如下表所示:

DER

二进制编码,后缀名.der/.cer/.crt

不包含私钥

PEM

BASE 64编码,后缀名.pem/.cer/.crt

不包含私钥

PKCS #12

PKCS编码,后缀名.p12

包含私钥

注意:公私密钥对必须成对出现才能保证公钥密钥学正常运转,所以如果CA同时为设备生成了公私密钥对和证书,就需要将公私密钥对(主要是其中的私钥)和证书同时颁发给设备,颁发时需要根据不同情况选择证书的存储格式。例如,颁发给PC时就要选择PKCS #12格式,将私钥和证书同时颁发;颁发给防火墙时,因为防火墙只支持DER/PEM格式,所以要选择DER/PEM,同时还必须将公私密钥对以单独文件的形式颁发给防火墙。

 

总结一下证书的使用方法:

1、通信双方各自持有自己的证书,当一方需要向另一方证明身份时,就把自己的证书发送过去。双方不用事先保存对方的证书,只在验证时接收对方发送过来的证书即可。

2、一方验证另一方证书的真伪时,必须事先获取到为另一方颁发证书的CA的证书,用这个CA证书来验证对方的证书。

注意:因为不同的CA会颁发不同证书,所以在证书的世界中,每个人可能会持有多个证书。同理,每个人也会获取到多个不同的CA证书。在这种情况下,一方收到另一方发过来的证书时,会根据证书中颁发者的名称,在自己的系统中查找对应的CA证书,找到后就用这个CA证书来验证。如果没有找到,那就说明事先没有获取到CA证书,也就无法判断对方发送过来的证书的真伪。

通过openssl或者cryptopp加密库均可以签名,生成证书。

扫描二维码,关注“小眼睛的梦呓”公众号,在手机端查看文章
扫描二维码,关注“清远的梦呓”公众号,在手机端查看文章

参考资料

《华为防火墙技术漫谈》

 


http://chatgpt.dhexx.cn/article/fCwqNYSI.shtml

相关文章

数字证书介绍

1.数字证书的分类 1.1按持有者分类 通常依照证书持有者的类型可将证书分为三类:个人证书、单位证书和系统证书。 个人证书:CA中心给个人颁发的证书,仅代表个人身份,证书包含个人信息和个人公钥。 单位证书:CA中心给…

数字证书相关

概念 数字证书 数字身份(digital identity)是身份标识方式的一种,是一对“钥匙”,其中一个只有她/他本人知道(即私钥),另一个是公开的(公钥)。把数字身份比喻成一个证件…

网站上数字证书原理你知道么?

前言:文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示…

CA证书(数字证书的原理)

转自:http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html(感谢) 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用。…

数字签名和数字证书的区别与联系

前言 最近在开发关于PDF合同文档电子签章的功能,大概意思就是在一份PDF合同上签名,盖章,使其具有法律效应。签章有法律效应必须满足两个条件: 能够证明签名,盖章者是谁,无法抵赖PDF合同在签章后不能被更改…

什么是数字证书

整理了几篇关于CA证书的经典文章: 文章目录 一、数字证书二、数字证书原理的形象理解 一、数字证书 什么是数字证书 一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥 二、数字证书原理的形象理解 数字证书原理与自建CA证书 第一…

数字证书

文章目录 前言一、什么是数字证书二、数字证书申请和验证1.证书申请流程2.浏览器如何验证证书 三、KeyTool自签名证书1.生成自签名证书2.导出证书3.查看证书4.构建CA签名证书 总结 前言 本文主要介绍什么是数字证书和如何使用keytool工具常用命令的使用。最后构建自签名证书。…

GCN的Benchmark数据集溯源

前言 GNN领域最经典的论文之一是Kipf同学2016年发布的GCN。 经典的GCN做了四个数据集的实验,后续工作基本会在这4个数据集上也做一次。 但是由于年代久远,和一些历史问题, 后来者想做对比实验难免遇到一些“从哪里获取"与"是这…

GNN学习笔记(四):图注意力神经网络(GAT)节点分类任务实现

目录 0 引言 1、Cora数据集 2、citeseer数据集 3、Pubmed数据集 4、DBLP数据集 5、Tox21 数据集 6、代码 嘚嘚嘚,唠叨小主,闪亮登场,哈哈,过时了过时了,闪亮登场换成大驾光临,哈哈,这样才…

图卷积神经网络GCN之节点分类

使用pytorch 的相关神经网络库, 手动编写图卷积神经网络模型(GCN), 并在相应的图结构数据集上完成节点分类任务。本次实验的内容如下: 实验准备:搭建基于GPU的pytorch实验环境。数据下载与预处理:使用torch_geometric…

win10下使用pycharm实现基于pyg的cora+citeseer+pubmed数据集的JKNET模型测试

目录 前期准备工作 1、数据集基本情况 2、标准数据集划分方式 3、数据集处理和分析 整体数据分析 cora citeseer pubmed 4、代码参考 GraphSAGE实验结果(代码详细注释) 1、代码结构 2、超参数 3、实验结果(pubmed+mean_pool+sum) 2层SageGCN层 实验补充 3层S…

GraphSAGE模型实验记录(简洁版)【Cora、Citeseer、Pubmed】

1、准备工作 数据集 数据集图节点边特征标签(y)Cora12708542914337Citeseer13327473237036Pubmed119717443385003 数据集划分方式:https://github.com/kimiyoung/planetoid (Zhilin Yang, William W. Cohen, Ruslan Salakhutdinov, Revisiting Semi-Supervised L…

GCN使用的数据集Cora、Citeseer、Pubmed、Tox21格式

文章目录 Cora、Citeseer、Pubmed以Cora为例数据格式示例 Tox21 数据集 本文分享一下图卷积网络GCN里用到的一些数据集的格式 Cora、Citeseer、Pubmed 数据集来源#图#节点#边#特征#标签(y)Cora“Collective classification in network data,” AI magazine,200812708542914337…

小白的靶机VulnHub-Stapler

从这一台靶机开始 就要上VirtualBox了 开机界面就是个这 就凑合一下 开桥接 确定靶机ip地址 :192.168.56.102 要上 了哦!!!!! 扫出 好多 好多 端口 像极了一个蜜罐 我淦 从ftp 入手吧 进行匿名登录 进…

Vulnhub-靶机-Stapler 1

Vulnhub—靶机—Stapler 1 本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关 文章目录 Vulnhub—靶机—Stapler 1一、信息收集二、漏洞利用三、Flag 一、信息收集 【步骤一】使…

调用Jenkins api报错 403 forbidden

** 调用Jenkins api报错 403 forbidden ** String url url "/computer/doCreateItem?nametest&typehudson.slaves.DumbSlave";HttpHeaders headers new HttpHeaders();MultiVpalueMap<String, String> parameters new LinkedMultiValueMap<>()…

Vulnhub 靶机 Stapler write up samba+wp advanced-video ->mysql 密码 连接 john解密 登录后台 wp插件getshell sudo提权

Stapler write up 0x00 靶机搭建0x01 信息收集0x02 漏洞挖掘web思路mysql 思路ftp 思路139 samba思路步骤一&#xff1a;ftp匿名访问步骤二&#xff1a;samba139测试步骤三&#xff1a;web渗透 80步骤四&#xff1a;web渗透12380端口步骤五&#xff1a;利用wordpress漏洞步骤六…

macOS分发app打包+签名+公证+添加票据+生成dmg文件

1.打包 网上有很多使用命令行的打包的方式大家可自行查找,以下是使用Xcode进行打包. 首先配置证书要配置Developer ID Application证书然后使用的是Xcode进行打包:Product->Archive 这种打包方式的好处是省去了签名的过程,但是用网上其他人的命令查看签名时候还是未成功&a…

CTF实战之Stapler

CTF实战之Stapler Penetrating Methodology: 0x01 网络扫描&#xff08;Nmap, netdiscover&#xff09; nmap -sP 192.168.153.0/24 通过筛选找到靶机地址 扫描靶机端口 nmap -sT -T4 -sV -p 1-65535 192.168.153.154通过端口扫描发现靶机开了很多端口 我们一个一个来 …

Jenkins 远程命令执行漏洞 (CVE-2018-1000861)复现

文章目录 漏洞描述&#xff08;介绍、成因&#xff09;漏洞危害适用场景实验环境漏洞复现过程1、 开启docker环境2、通过dnslog检测漏洞是否存在3、监听端口4、利用exp获取反弹shell 修复建议扩展知识&#xff08;链接、文章&#xff09; 漏洞描述&#xff08;介绍、成因&#…