文章目录
概述
首先我们需要简单对证书有一个基本的概念,以几个问题进入了解
| ❓ Question1: 什么是证书?
证书是一种电子文档(可以理解为网络世界的身份证),用于在通信双方时验证对方的身份,它包含了证书持有者的信息,公钥以及由可信第三方(称为证书颁发机构,CA)对这些信息的数字签名
| ❓ Question2: 为什么需要证书?
证书的在网络安全通信中作用极大:
- 身份验证: 证书用于验证通信双方的身份,通过证书可以确认对方是可信的,从而防止身份伪造和中间人攻击
- 数据加密:证书包含的公钥用于加密数据,从而确保数据在传输过长中不被窃听和篡改,只有持有相应私钥的接收方来解密这些数据
- 数字签名:证书用于对数据进行数字签名,以确保数据的完整性和不可否认性。数字签名可以证明数据在传输过程中未被篡改,且签名确实来自签名者
- 安全通信:证书在安全协议(如SSL/TLS)中起着至关重要的作用。这些协议通过使用证书来建立安全的通信通道,保护数据的机密性和完整性
- 信任建立:证书通过公钥基础设施(PKI)来建立信任链。根证书由权威的CA签发,任何经过根证书认证的证书都被认为是可信的,从而形成一个信任体系。
非对称加密
非对称加密在证书中扮演了非常重要的角色,甚至可以说是为了非对称加密这瓶醋才包了证书这盘饺子
公钥:可以向任何人公开,发送方使用接收方的公钥来加密消息
私钥:仅归自己所有,不可被公开,接收方使用自己的私钥来解密发送方加密的消息,只有拥有正确私钥的人才能解密由其公钥加密的数据。
User Case: 数据加密
公钥和私钥在数据加密中使用流程如下,图片十分清晰,我们不再赘述
User Case: 签名验证
辅助上图,描述下整体流程(我们以Server代发送方,Client代接收方):
- Server生成数据签名流程
- Server对原始数据(文件或消息)使用Hash函数生成一个固定长度的hash值
- Server使用自己的私钥加密hash值
- Server添加证书或TimeStamp与hash值一起生产一个数字签名
- 发布数字签名
- Client验证签名流程
- Client接受到 原始数据 和 附加的数字签名
- Client对 原始数据应用相同的散列函数,生成一个新的hash值 用于与签名中的hash值进行比较
- Client使用Server发布的公钥解密数字签名,获得Server端生成的hash值
- Client对比两个hash值(Client生产的和Server生产的),如果hash值一致则能确定数据未被篡改
潜在问题
公钥私钥已经保证了一定的安全性
发送者使用数字签名来认证自己
client验证身份后,双方在对称加密和hash算法保护的安全信道上发送消息
| ❓ 但是,Client如何确定sender是可信的呢?
例如:如果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使用私钥签名证书 分发证书给申请者 发布证书到证书库 拒绝申请并通知申请者
- Server生成自己的一对公钥和私钥,私钥一般由Server独自控制和拥有,但某些情况下,私钥可能会在颁发CA控制的硬件安全模块(HSM)中生成并安全存储
- Server向CA发送包含其公钥和其他识别详细信息的证书签名请求(CSR)
- CA采取措施验证Server的身份和在CSR中申领凭证的权力(如Server的域名是否有效或电子邮件证书的电子邮件地址是否有效),即确认提交的CSR确实由Server创建
- CA验证成功Server身份,为Server颁发包含CSR详细信息和公钥的证书。同时CA将使用自己的私钥对颁发的证书进行数字签名,并且将新签证书发布到证书库,以便其他用户和系统能够验证其有效性
CA验证签名流程
以下以Client代证书申请验证人
- Client向Server首次建立通信时,Server返回被签发的证书
- Client读取证书中相关明文的信息(明文中含有CA签名的Hash算法),Client采用相同的Hash算法计算明文信息的info digest,然后使用CA的公钥解密签名数据,对比证书的加密的info digest,如果一致,则可以确认证书的合法性
- Client验证证书相关的域名信息,有效时间等信息
- Client会内置安装CA本身的证书信息(由CA自签发),如果CA不被信任,Client找不到对应的CA证书,证书也会判定为非法
CA吊销证书流程
证书超过有效期时,证书就不再有效或不可信,证书持有者或第三方(如系统管理员)就会向CA提交吊销证书请求
CA也会通过自动检测(如发现私钥泄露,证书被滥用等)发起吊销流程
是 否 接收吊销请求 验证吊销请求 验证通过? 记录吊销信息 拒绝吊销请求并通知请求方 更新CRL 更新OCSP数据 发布更新后的CRL 通知证书持有者 通知依赖方
-
CA验证吊销请求的真实性和合法性,可能包括身份验证、关联凭证检查等。
-
CA在内部数据库中记录证书的吊销信息,包括吊销日期和原因
-
CA更新证书吊销列表(CRL),将被吊销的证书信息添加到CRL中
-
CA定期发布更新后的CRL,使依赖方(如客户端、服务器)能够获取最新的吊销信息
-
CA更新在线证书状态协议(OCSP)响应数据,确保实时查询能够返回最新的吊销状态
-
CA通知证书持有者其证书已被吊销,说明吊销原因和后续步骤
CA可能通过公告或直接通知相关依赖方,确保其知晓证书吊销信息。
PKI
PKI 全称Public Key Infrastructure, 是一组构成加密框架的技术和流程,可以理解为PKI为减轻CA的负担搭建的一套以CA为核心的服务框架扩展,从而实现更系统化,标准化和大规模管理数字证书
PKI主要包含以下几部分
-
CA:这里的CA专职颁发,存储和签署数字证书
-
RA:RA分担了原来CA的功能,专门负责审查证书申请者的身份,判断是否同意CA向申请者签发证书
-
VA: Validation Authority, 由于证书具有有效期,VA负责的是证书状态的实时验证,以下简述VA的工作流程
- VA定期从CA下载最新的证书吊销列表(CRL)和获取实时证书状态并存储在本地数据库
- Client发起证书验证请求(OCSP 在线证书状态协议),请求中包含要验证证书的唯一标识,OCSP请求会发送至VA的OCSP服务器
- VA解析请求内容,提取出待验证证书信息,查询本地数据库获取证书状态
- 根据查询结果生成OCSP响应并用自己的私钥对响应签名,确保响应的完整性和可信性
- 客户端拿到响应,根据证书状态确定下一步操作
发送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签发,如果根证书被信任,所有由其签发的中间证书和最终用户证书也会被信任。