PKI 公钥基础设施原理与应用

PKI 是什么

Public Key Infrastructure(PKI),中文叫做公钥基础设施,可以理解为利用公钥技术为网络应用提供加密和数字签名等密码服务以及必需的密钥和证书管理体系。它是一个提供安全服务的基础设施,PKI 技术是信息安全技术的核心,同时也是电子商务的关键和基础技术。

PKI 的主要目的是发“身份证明书”,网络上通信时,如果能相互确认身份证明书,就能确定是在跟对的人通信。身份证明书不能私人订制,需要可信的发证机构来颁发才行,就像派出所给个人发的身份证一样。

PKI 详细介绍

PKI 的组成

PKI 是一个标准,下面以最常见的用户访问 HTTPS 网站场景来看看PKI 常见组成部分和交互流程。

PKI 组成部分

上图中有以下组件:

  1. CA 机构:是 PKI 的核心,主要负责数字证书的申请和签发、已颁发证书的管理,还要负责证书黑名单的登记和发布。
  2. Web 服务器:如果在 Web 服务器上部署了 HTTPS 域名,那么就需要去 CA 机构申请该域名匹配的 CA 证书。该证书用于浏览器鉴别网站身份、以及实现浏览器和网站之间的加密通讯。
  3. 用户浏览器:浏览器在访问使用了 HTTPS 的域名时,会收到 Web 服务器传来的 CA 证书,浏览器需要使用一定的策略来验证证书的有效性,包括使用根证书来签证签名有效性和去 CA 机构查询该证书是否被撤销。

核心算法

PKI 标准建立在非对称密钥、散列算法的基础上,什么是非对称密钥呢?什么是散列算法呢?

介绍非对称密钥之前,要先说一下对称密钥。对称密钥是指加密和解码使用的是同一个密钥,常见的对称加密算法有 DES、3DES、AES。非对称密钥在加密是使用一个密钥,解码时需要使用另一个密钥,两个密钥是不同的,分别称为公钥和私钥,大名鼎鼎的 RSA 就是非对称密钥了。

非对称密钥的公钥是可以公开的,私钥不公开。这样其他用户使用公钥加密的数据,只有私钥拥有者才能解密,在解密的密钥不需在网络上传输的情况下,实现了机密数据的安全传输。

散列算法也叫哈希函数、单向加密,顾名思义经过散列算法加工得到的数据,无法逆向解密得到原始数据。所谓哈希函数是,输入任意长度的消息,通过一个单向的运算产生一个定长的输出,这个输出被称之为 Hash 值。因为长度较短、碰撞较少的特点,经常用来检验数据是否被篡改。常见的散列算法有 MD5、SHA-1、SHA256 等。

非对称密钥是实现传输安全的基础,散列算法可以用来检测数据是否被篡改,可以用于身份认证。

CA 机构

作为 PKI 的核心,CA 机构承担了一系列重要功能:

  1. 数字证书的颁发
    • 接收、验证用户数字证书的申请
    • 证书申请的审批
    • 颁发数字证书、或拒绝证书申请
  2. 处理最终用户的数字证书更新请求
  3. 数字证书的撤销
  4. 数字证书的查询(证书查询、撤销查询)
  5. 数字证书、历史数据归档

一个常见 CA 系统的常见部署结构如下图所示,包含:

  1. RA 服务器:负责受理证书的申请和审核。
  2. CA 服务器:负责数字证书的生成、发放,根证书的私钥可以存放在硬件安全模块 HSM 中,让 HSM 来签发证书,也可以加密后存储在数据库中,通过代码来实现签发。(当然使用 HSM 更安全)
  3. 目录服务器:提供数字证书的存储,以及数字证书和证书撤销列表(CRL)的查询。业者有时把它称为”LDAP”,这是因为目录服务的技术标准遵循LDAP (轻量级目录访问协议)的缘故。
  4. CRL/OCSP 服务器:对外提供证书撤销列表 CRL 下载,以及证书在线状态的查询。
  5. 证书查询:对外提供已颁发证书的查询。

CA 系统结构

数字证书

为什么通过数字证书能够验证某个网站的合法性呢?我们先看看数字证书里有什么内容,目前所有证书都是按照 ITU-T X.509 国际标准指定的,主要包含以下数据:

  1. 版本号:指出该证书使用了哪种版本的 X.509 标准(版本1、版本2或是版本3),版本号会影响证书中的一些特定信息,目前的版本为3
  2. 序列号: 标识证书的唯一整数,由证书颁发者分配的本证书的唯一标识符
  3. 签名算法标识符: 用于签证书的算法标识,由对象标识符加上相关的参数组成,用于说明本证书所用的数字签名算法。例如,SHA-1 和RSA 的对象标识符就用来说明该数字签名是利用 RSA 对 SHA-1 杂凑加密
  4. 认证机构的数字签名:这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改过
  5. 认证机构: 证书颁发者的可识别名(DN),是签发该证书的实体唯一的 CA 的 X.500 名字。使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级 CA 证书,发布者自己签发证书)
  6. 有效期限: 证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效
  7. 主题信息:证书持有人唯一的标识符(或称 DN-distinguished name)这个名字在 Internet 上应该是唯一的
  8. 公钥信息: 包括证书持有人的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数
  9. 颁发者唯一标识符:标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项
  10. 扩展信息:证书里还可以添加一些自定义的扩展信息,比如证书撤销查询的地址。

证书的有效性检查需要经历多个步骤:

  1. 有效期限:校验当前时间是否在有限期限内。
  2. 数字签名:该签名的计算过程是:先使用散列算法生成证书内容的摘要,再使用非对称加密里的私钥加密摘要,便得到了数字签名。在验证证书有效性时,首先需要拿到认证机构证书,使用其公钥解密数字签名得到证书内容摘要 A,然后使用散列算法计算证书内容摘要 B,两个摘要进行对比,如果不相等说明证书无效的。
  3. 证书撤销查询:前两步检查通过后,说明该证书是合法 CA 机构颁发的,但还需要检查该证书是否已经被撤销(比如私钥泄漏的证书必须撤销)。证书撤销检查方法主要有两种:证书撤销列表 CRL、在线证书状态协议 OCSP。

下图是数字证书的生成和验证:

数字证书的生成和验证

下图显示了一个证书里的 CRL、OCSP 地址:

一个例子

在上面的图中,可以看到 chainnews、RapidSSL、DigiCert 三个证书,他们共同构成了一个证书链:chainnews 由 RapidSSL 签发、RapidSSL 由 DigiCert 签发,其中 DigiCert 是根证书、RapidSSL 是二级证书。同理,在验证证书签名时,使用 RapidSSL 验证 chainnews,再使用根证书验证 RapidSSL。验证的终点是根证书,根证书是自签的,那如何保证根证书的合法性呢?一般在安装浏览器的时候,就内置了可信任的根证书。

证书链

证书撤销机制

常见的证书撤销机制有 CRL、OCSP、OCSP Stapling。

CRL 全称是证书撤销列表 Certificate Revocation Lists,CA 机构会定期更新发布撤销证书列表,CRL 分布在公共可用的存储库中,浏览器可以在验证证书时获取并查阅 CA 的最新 CRL。该方法的缺陷有两个:一是撤销的时间粒度受限于 CRL 发布周期,二是 CRL 文件包含的撤销证书较多时文件会很大。

OCSP 全称是在线证书状态协议 Online Certificate Status Protocol,浏览器从在线 OCSP 服务器(也称为OCSP Response Server)请求证书的撤销状态,OCSP Server 予以响应。这种方法避免 CRL 更新延迟问题,但是每次验证证书都要请求 OCSP Server 严重影响性能。

OCSP Stapling 是对 OCSP 的一个改进。OCSP Server 通常离用户较远,查询耗时可能很长。一个改进思路是将通过 OCSP Server 获取证书吊销状况的过程交给 Web 服务器来做,Web 服务器不光可以直接查询 OCSP 信息,规避网络访问限制、OCSP 服务器离用户的物理距离较远等问题,还可以将查询响应缓存起来,给其他浏览器使用。由于 OCSP 的响应也是具备 CA RSA 私钥签名的,所以不用担心伪造问题。

应用:访问控制

PKI 提供了一套身份认证、安全传输的机制,最常见的应用就是各种 HTTPS 网站了。通过给合法的 HTTPS 域名颁发 CA 证书,浏览器便可以通过验证 CA 证书的有效性来确认所访问网站的真伪。

PKI 还可以用于服务器的访问权限控制,HTTPS 域名的认证是单向的,只有浏览器客户端对网站的认证,反过来如果给允许访问服务器的客户端都发一份证书,在客户端访问服务器时,服务器对客户端证书进行验证,即可起到访问控制的作用。

双向认证

参考资料

  1. 对称密码、非对称密码、散列算法与 PKI
  2. PKI 的核心 CA
  3. Security-CA & chain of trust
发布了232 篇原创文章 · 获赞 347 · 访问量 79万+

猜你喜欢

转载自blog.csdn.net/hustspy1990/article/details/103647808
PKI