目录
数字证书
首先介绍OCSP之前我们先来复习一下数字证书的基础知识。
如下两张图,讲解了数字证书的生成和验证流程。
A:发送端
B:接收端
CA:权威认证中心
P:A的公钥
CA_P,CA_S:权威认证中心的公钥及私钥
数字证书的生成
数字证书的验证
数字证书相当于是CA权威认证中心给A颁发的身份证书
1. 公开密钥(Public Key) 🔑
数字证书的核心功能之一是包含证书持有者的公开密钥。这是一个非常关键的信息,因为它允许数据发送者加密信息,仅证书持有者的私钥能解开。这种机制确保了数据在传输过程中的安全性。
2. 主体信息(Subject) 🆔
证书中还会详细记录主体信息,即证书持有者的身份信息。这可能包括个人名称、组织名称、部门名称等。通过这些信息,可以验证证书持有者的真实身份,从而增加交易的信任度。
3. 颁发者(Issuer) 🏢
颁发者信息表明了哪一个权威机构颁发了这个证书。这是证书信任链的重要一环,帮助用户识别和信任证书的有效性。权威机构的严格审核流程保证了证书的可靠性。
4. 有效期(Validity Period) 📅
每个数字证书都有其有效期限,这是证书可被认为有效的时间范围。有效期通常包含起始日期和结束日期。过期的证书不能被信任,需及时更新。
5. 证书序列号(Serial Number) 🔢
为了确保每个证书的唯一性,每个证书都会被赋予一个独一无二的序列号。这个号码在证书的生命周期内保持不变,可以用来追踪或撤销证书。
6. 数字签名(Digital Signature) 🖋️
证书中还包含了颁发机构对证书的数字签名。这是一种算法处理的结果,用来验证证书的完整性和真实性。只有通过了数字签名的验证,证书内容才被认为是未被篡改的。
7. 使用限制(Usage Restrictions) 🚫
有些证书可能会有特定的使用限制,例如只能用于加密邮件、只能 用于身份验证等。这些限制确保证书不会被误用,同时也保护了证书持有者的权益
拿到证书后,这张证书不经过验证是不能放心使用的。验证由安全认证应用软件执行,验证需要包括以下的内容:
- 证书完整性验证。即确认这个证书没有被别人篡改过。这项验证可以通过验证证书中CA的数字签名而完成。
- 证书可信性验证。即确认该证书是由一个可信的CA颁发的。为此验证者必须验证证书链,即从对方的CA信任域的底层开始,逐层向上查询,一直追溯到信任链的终点,通常是根CA为止,找到权威的根CA的签名,这才完成验证。
- 证书有效性验证。即确认该证书是否已经失效。
- 有关证书使用策略限制的验证。即确认证书的当前使用有没有超出证书中规定的策略限制。
本文将对证书有效性的管理和验证作一番探讨。
证书有效性的管理机制
证书的有效性取决于两个方面因素:
1. 第一个因素是证书有效期,证书的有效期在证书被颁发之日就已经确定了。证书的有效期(Validity Period)作为一项内容被写进了数字证书之中,它用两个日期——证书开始生效的日期和证书失效的日期来表示。显然,已经过了有效期的证书不能通过验证。
证书有效期的设定是出于安全的考虑,当一张证书有效期将结束时,如果想继续使用就需要更新,证书更新时将产生新的公私密钥对,密钥定期更新对于证书的安全性是有好处的。
2. 第二个因素是证书注销,虽然证书有效期没有过,但是如果发生了特殊情况,例如用户发现证书遗失或私钥失密,用户会向CA/RA提出注销证书的申请,CA/RA经过审核后将实施证书注销。那么,被注销的证书也不能通过验证。
第一种情况比较简单,证书的有效期就写在了证书之中,安全认证应用软件只要调出证书的内容,判断一下就知道这张数字证书当前是否还在有效期内。
第二种情况则比较复杂,证书一旦发出,是不可能收回的。怎么办呢?只能申请注销。所谓注销,就是要求当初颁发这张证书的单位(CA)出一张告示,宣布某张证书已经被注销作废,警告有关的交易者注意,不要再使用与这张证书绑定的公钥。在PKI安全认证体系中,这种“告示”称为证书注销列表(或证书撤销清单、证书注销清单、证书废止列表等),英文原文是Certificate Revocation List,缩写为CRL。
对于第二种情况,安全认证应用软件在验证证书的有效性时就需要去访问证书注销列表(CRL)。这个列表相当于“黑名单”,一旦发现通信对方的证书在这张列表中,就不能通过验证。
证书注销机制可以防止证书遗失或发现私钥失密后,不法分子冒用用户证书、私钥实行欺诈交易所带来的损失。这和信用卡注销、有效证件注销的机制十分类似。
CRL
根据X.509标准,CRL的内容和数据结构定义如下图所示:
CRL的发布
CRL的数据形成后,要把它公布在网上,然而,CRL的数据集中存放在CA的服务器中可能带来另一个问题,就是当用户数量庞大,而且到了交易集中发生的高峰时期时,对服务器的并发访问可能造成网络和服务器的拥塞,致使交易效率急剧下降甚至超时。
解决这个问题有以下两个办法:
第一个办法是使用分段的CRL,就是把庞大的CRL分成很多可控的片段,并允许一个CA的证书注销信息通过多个CRL发布出来。在证书的扩展项中,有一个子项称为CRL分布点,它指出CRL分布点的分布位置,用户可以根据这个参数来访问相应的CRL。
第二个办法是建立远程的镜像服务器。这些镜像服务器分布在其他城市或一些大客户的所在地。CA的主服务器负责对这些镜像服务器进行定期数据更新,以便使镜像服务器的数据内容和主服务器保持一致。设置镜像服务器的目的有两个:一是加快当地用户访问目录服务器的响应时间。二是通过设置镜像服务器可以对大量的并发访问进行分流,减轻高峰时间主服务器的负担。此外,作为一种备份机制,镜像服务器还可以在主服务器故障期间起到备份作用,提供不间断服务,这就提高了整个系统的可用率。
CRL的更新
从安全的角度上讲,CRL最好是进行实时更新,即一旦发生证书注销事件就立即更新,以杜绝欺诈案件的得逞。但这种实时更新的代价非常高,要占用大量的网络资源和服务器资源,反过来又会影响到网上交易的进行。因此,业内普遍的做法是定期更新。
然而,当CRL数据总量非常庞大时,即使是每天更新一次也会给系统带来过大的负担。因此,又出现了增量CRL的概念。增量CRL的想法就是不需要每注销一张证书就产生一个完整的、越来越大的CRL,它只是产生一个与注销该证书相关的增加信息。
根据定义,增量CRL是以已经颁发的注销信息为基础的,这个已经颁发的注销信息称为基本CRL,增量CRL中含有的是基本CRL中不含有的信息。引入增量CRL概念的好处是体积很小的增量CRL可以比基本CRL的更新频率高得多。例如,庞大的基本CRL的更新周期如果是一周的话,增量CRL的更新周期可以定为8小时,甚至更短。显然,这样的安全策略具有较高的安全性,而且不会给系统造成大的负担。
在线查询机制——OCSP
我们在上文已经提到,CRL方法存在一些缺点,
其一就是CRL不可能实时更新,由于CA每隔一定时间才发布CRL,所以CRL不能及时地反应证书的状态,在安全性上有一定局限;
其二,即使定期更新CRL也有麻烦,当注销证书的数量很大及用户基础很大时,CRL常常会越变越大。 每次CRL分发会大量消耗网络带宽和服务器处理能力。
对于很多集群客户来说,为了提高证书有效性验证效率,往往把CRL先下载到自己的服务器上,以减少对CRL的在线查询。然而频繁地下载CRL也是令用户头疼的问题。
于是,另一种证书有效性的管理和查询方法,即在线查询机制应运而生。它使用的协议称为在线证书状态协议,英文是OCSP(Online Certificate Status Protocol)。
在线证书状态协议(OCSP)是IETF颁布的用于检查数字证书在某一交易时间是否有效的标准,在RFC 2560中有描述。
它为网上业务提供了一种检验数字证书有效性的途径,比下载和处理证书注销列表(CRL)的传统方式更快、更方便和更具独立性。OCSP实时在线地向用户提供证书状态,其结果是它比CRL处理快得多,并避免了令人头痛的逻辑问题和处理开销。
OCSP在线查询机制的简单过程如下(见插图):
用户的客户机形成查询指定证书状态请求,并将请求转发到一个OCSP服务器,服务器建立与CA证书库的连接,并查询CA证书库而获得该证书的状态,服务器返回客户机有关证书有效性信息。
简单地说,
一个OCSP请求,由协议版本号、服务请求类型及一个或多个证书标识符等信息所组成;
响应信息是由证书标识符、证书状态——“有效”、“注销”或“未知”三个中的一个、以及验证相应时间等信息所组成。
详细信息见下表所示:
响应信息必须经过数字签名,以保证这个信息的真实性和完整性(未被篡改)。签名密钥属于CA,即颁发这张证书的权威、可信的第三方机构,因此,在任何情况下,用户都能够信任这个信息。
OCSP在线查询机制只能检测证书的注销状态,没有其他功能,例如不能检查证书的有效期,也不返回用户一个完全的证书。但是这种用法在某些应用场合下,对于验证证书的有效性来说是快速有效的。
由于使用OCSP在线查询必须保持用户在线状态,且用户访问的对象集中在CA的OCSP服务器上,这同样会带来高峰负载过重,交通拥塞效率下降的问题。
从以上的描述中我们可以看到,CRL和OCSP两种机制所针对的目标和实现的功能是一样的,只不过实现的方法途径不一样,两者具有异曲同工之妙。