PKI 的组件及处理流程

我爱海鲸 2022-05-04 16:15:49 暂无标签

简介公钥基础设施证书系统、https

一、PKI 的组件

1、PKI:一个服务器的框架,为颁发证书而推出一系列的软硬件措施,通常来支持大范围部署的基于公钥的技术。
2、CA:一个中心授权机构(可信任的三方),它在一个网络中签名所有的公钥。
3、RA:它就是一个 CA 的前端代理,减轻 CA 的负担,主要完成接收证书请求,验证请求着的身份
4、证书:一个被 CA 签名的文档,用于绑定名字到公钥

其实,CA 非常像我们生活中的公安局,我们通常都非常信任这个机构,而证书就像我们的身份证,需要被登记或者颁发。

二、PKI 标准

目前,我们所使用的标准格式为 x.509v3,它由多个字段组成一张数字证书,数字证书具有合法性和权威性,比如,证书签发
者的名称、主体的公钥信息、CA 对证书的数字签名、证书的有效期

Distinguished Name:目录命名的方式为 DN,比如 cn=user1, ou=cciese, dc=cciese, dc=com (微软的 AD 就采用这种
架构)

我们常常听到关于 PKCS#10 和 7,它们到底起什么作用?

PKCS#10 公钥加密标准,定义了当一台设备建立和请求个人证书时,设备需要包括和使用的实际信息的内容和格式,主要为
用户提供离线申请方式
CN 或者 DN:名字或者可区分的名字,这是必选的
可选的包括 |组织单位(OU)、组织(O)、地点(L)、省市(LP)、国家(CN)、主体可选名字(FQDN)、EMAIL
(E))
密钥大小:建立公私钥对的密钥大小。通常为 512、768、1024、2048


PKCS#7 是一个封装数据的标准,在一个 PKCS#7 封装里边,可以放置一个用户证书和颁发服务器的根证书。 用于
签名和加密实体证书,并且发送给请求设备。

三、PKI 解决了什么问题?

我们通常在建立 VPN 的时候,喜欢用预共享密钥,因为它最简单,也方便排错,但是,它往往具有很大的安全隐患,因为,
无论谁,只需要知道了预共享密钥的情况下,就可以与你建立起 VPN 隧道,而 VPN 设备它是不知道对方是否合法,只能通过
预共享密钥来识别,后来,又出现了数字签名的方案。

数字签名:使用私钥加密公钥解密完成数字签名,实现完整性校验、源认证、不可否认性

1、A 用一个散列函数计算重要的文件得到一个散列值
2、A 使用自己的私钥加密这个散列值,得到一个数字签名
3、把重要文件和签名打包一起发送给 B
4、B 收到以后,使用相同的散列函数对重要文件进行计算,得到的一个散列值的结果
5、B 利用 A 的公钥对发送过来的数字签名进行解密,得到 A 计算的散列值结果
6、B 把自己算出来的散列值结果与A的进行比较吗,如果相同,说明是合法的。

存在的问题:在使用任何 RSA 的服务器之前,一个实体需要获取其他实体的公钥。那么,我们怎么能确定对方的公钥一定是那
个实体的呢。

在传统解决颁发就是,当一个公钥通过在线方式发送给对方的时候,首先做一个 HASH,在线方式可以是 QQ、邮件,当对方
收到这个公钥后,也用同样的方法做一个 HASH,然后通过离线的方式做确认,比如,电话。
这样的办法,虽然安全,但是不存在扩展性,因为实体认证一多,那么就需要离线确认多个,这样不太现实。
那么 PKI 解决的就是这一个问题,公钥分发管理的问题,它以一个第三方信任机构的角色存在。

可信任的第三方协议

1、基于对公钥的数字签名
2、每一个实体信任的一个中心的权威机构

   1)信任是基于数字签名的

   2)中心授权机构的签名都被认为是可信的

   3)每一个实体都有中心授权机构的公钥,用户验证它的签名

3、中心授权机构对每一个实体的公钥进行签名

四、证书的申请方式

申请的方式可分为离线和在线的方式进行证书申请,什么时候用到在线申请和离线呢?

如果,我们能与 CA 服务器进行正常通信的话,那么就利用在线申请方式申请,通常 CA 服务器是在内部存在的。 离线方式是经常出差的员工,或者合作伙伴来申
请证书,必须通过离线的方式进行申请,因为它不能正常的访问到 CA 服务器

在线方式

SCEP:简单证书在线注册协议.使用 HTTP 在与设备之间共享信息。设备可以通过 URL 来访问 CA,也可以通过这
个来申请证书。CA 使用 PKCS#7 的格式发送给设备。SCEP 可以自动下载 CRL,常见的为 HTTP、HTTPS、LDAP,由 cisco
设计的技术,主要为 VPN 设备提供的 PKI 证书申请的工业标准。

SCEP,PKCS#7,PKCS#10: 使用 SCEP 进行证书申请的时候,同时会使用 PKCS#7 和 PKCS#10,PKCS#10 对证书请求进
行编码,PKCS#7 对 PKCS#10 的请求的内容,或者请求得到的证书进行封装

PKCS#12:用于在一个单一文件交换公共和私有对象(公钥、私钥、证书),它可以包含证书和关联的私钥。它提供了一个加
密机制(在 IOS 上做 CA 服务器的时候,输入的密码),因此私钥是能够被保护的,Cisco 优先使用这个模式来承载 PKI 资料。
(微软使用的为.pfx,cisco 为.p12,存放在 nvram 里面,可以 dir 查看)

离线方式

设备产生 PKCS#10 信息,以离线的方式发送给管理员,然后由管理员在 CA 服务器上建立一个 x.509 的实体证书,
以.cer 或者 PEM的文件,以电子邮件形式发送给请求者。

CA 管理员可以通过两种方式来颁发证书: 1、随机数口令 2、手动验证

吊销方式

当某些时候,一个员工离职了,或者对等体设备不可用了,我们需要把一些合法的证书销毁掉,那么其余的正常人员怎么知道
哪些证书合法、哪些不合法。那么就通过吊销列表方式,它会存储在 CA 服务器上或者是其余的外部数据库中,客户端会周期
性的下载这个最新的 CRL 来获取最新的

CRL:证书吊销列表,类似于通缉布告,用于告诉用户哪些证书是合法的,哪些证书已经被吊销了,客户会周期性的轮询 CRL
存储位置(http/ldap/ftp)获取当前 CRL

   1、一旦吊销了证书,新的 CRL 就会颁发,但是不会被客户马上获取,需要等待老的 CRL 超期,从会获取新的 (cisco 默认为
4 小时缓存,在此期间,都会根据本地缓存的 CRL 来确认对方证书是否被吊销了,只有缓存到期后,从会轮询新的 CRL 到本地
缓存中)

   2、这个吊销列表会包含有效期和服务器的签名。

   3、在设计中,建议把 CRL 的本地缓存时间改为短点,因为很有可能在这个缓存期内,服务器已经吊销了一些证书,但是本地
缓存中还认为这些证书是有效的,这样就存在时间差了。

OCSP:在线式吊销状态查询协议,一种新的获取 CRL 的技术,但是 cisco IOS CA 不支持,微软的服务器支持
证书服务器的角色和功能:证书服务器(CA)的主要目的是验证证书请求和颁发证书。证书服务器是整个 PKI 系统中最为重要
的一个环节,一旦证书服务器被破环,整个 PKI 的运用将不再收到信任

CA 的分类

1、我们常常访问一些商业性的网站,比如淘宝、网银这些,它们的证书为什么都是合法的呢,因为它像是向合法
的 PKI 机构申请的,这些合法的机构是受整个 Intenet 信任的,比如,微软的 IE 中默认就有许多的受信任的颁发机构,这些机
构是盈利性的,而且价格不便宜。这种我们称为公有 CA

2、私有 CA:通常就是我们内部搭建的 CA 服务器,只用于企业内部的应用,比如 dot1x、给 VPN 设备颁发证书,给企业用
户颁发证书。

证书中包含的内容

数字证书包含的主要内容:

   1、Identity (个人信息)

   2、Some attributes(一些属性,限制证书的使用)

   3、Public key(公钥)

   4、Signature(证书服务器的数字签名)

证书的典型组成部分:

   1、Version(版本):最新的版本为 x.509 v3

   2、Serial Number (序列号):唯一标识某一证书服务器所颁发的证书

   3、Algorithm ID(签名算法):标识证书服务器签名证书时使用的具体算法

   4、Issuer(颁发着):颁发证书的证书服务器的个人信息

   5、Validity Period(有效期):证书有效期

   6、Subject Name(使用者):使用者的个人信息,使用 x.500 DN 的命名格式

   7、Public Key Algorithm (公钥算法) 公钥的算法,主要有 RSA 和 DSA

   8、Subject Public Key (公钥):使用者拥有的公钥。

   9、Subject Unique Identifier (使用者唯一标识):这是一个选项,当多个使用者使用相同名字时使用

   10、Issuer Unique Identifier (颁发者唯一标识):这是一个选项,当多个 CA 使用相同的名字时使用。

   11、Cerfificate Signature Algorithm(证书签名算法):CA 服务器签名证书时所使用的算法

   12、Certificate Signature(证书签名):证书服务器对颁发的证书所做的签名

五、PKI 的处理流程,在这个过程中时间是非常重要的。强烈建议部署 NTP V3 的服务

   1、同步时间:时间在整个 PKI 系统中是非常重要的,如果时间错误了,那么整个 PKI 系统就会无效,所以,在部署 PKI 之前,
必须确定时间是正确的

   2 、客户端产生密钥对:在申请证书之前,实体需要产生密钥对,通常我们使用 RSA 算法,可以是一个加密,一个签名,也可
以是一对加密,一对签名

   3 、每一实体必须获取证书服务器的根证书,这个根证书包含 CA 的公钥,我们通常需要离线确认这个根证书是否是合法的。

   4、每个实体提交自己的公钥和个人信息给 CA(申请个人证书)

   5、CA 收到 A 和 B 的申请后,会把各自的公钥和个人信息做一个 hash,然后用自己的私钥对这个 hash 进行数字签名,我们
称这个为数字证书。 证书中至少包含各自的公钥、个人信息和数字签名。

   6、CA 把进行了数字签名的证书发送给 A和 B,离线或者在线方式

   7、A 和 B 收到自己的个人证书后,它就拥有了 CA的根证书和自己的个人证书

   分析:为什么我们谈到 CA 证书的时候,一定是两张证书,必须拥有 CA 的根证书呢,我们假设一下,这时候一个对方的 VPN
设备利用数字证书来进行设备验证,那么对方的数字证书中包含 CA 的数字签名,这个签名是加密的,必须通过 CA 的公钥来
解密,CA 的公钥放在哪? 对咯,就是根证书里面,只有获取了 CA 的根证书才有公钥,有了公钥就能解开这个签名。

六、数字证书在 VPN 的交换过程

   之前提到过数字证书只是解决了公钥管理的问题,那么在 VPN 中它在哪个阶段起作用呢。

   IKE 第一阶段 5 6 个包的交换过程:

   1、发起方会把用 DH 材料计算出来的散列值用自己的私钥进行加密,得到一个数字签名,还会携带自己的个人证书(包含个人信息与自己的公钥)hostname,一起发送给接收方

   2、接收方收到以后,利用根证书的公钥来解开 CA 的签名,验证是否合法

   3、验证通过以后,检查发起方的 hostname 是否与发起方的个人信息是否匹配

   4、匹配后,利用发起方的公钥解开它的发起方用自己私钥加密的数字签名

   5、解开后,得到一个散列值,接收方在用相同的 DH 材料计算另外一个散列值,与接收方的对
比,匹配了则认证通过

   6、这个过程是双向的,也就是 A 和 B 会采用同样的方法进行验证对方。

七、扩展

什么是https

 

你好:我的2025