怎样验证数字证书
数字证书号称是网上的身份证。网上交易者通过交易对象的数字证书对其产生信任,并能够使用和证书绑定的公钥和交易对象通信,这是PKI认证机制的基本宗旨。但是,当网上交易者从交易对象那里直接获取,或通过访问CA证书库等不同途径得到了交易对象的数字证书以后,这张证书不经过验证是不能放心使用的。验证由安全认证应用软件执行,验证需要包括以下的内容:
· 证书完整性验证。即确认这个证书没有被别人篡改过。这项验证可以通过验证证书中CA的数字签名而完成。
· 证书可信性验证。即确认该证书是由一个可信的CA颁发的。为此验证者必须验证证书链,即从对方的CA信任域的底层开始,逐层向上查询,一直追溯到信任链的终点,通常是根CA为止,找到权威的根CA的签名,这才完成验证。(有关证书链的概念,可参阅《晨曦》07年第 期知识园地“证书链是怎么回事”一文。)
· 证书有效性验证。即确认该证书是否已经失效。
· 有关证书使用策略限制的验证。即确认证书的当前使用有没有超出证书中规定的策略限制。
本文将对证书有效性的管理和验证作一番探讨。
证书有效性的管理机制
证书的有效性取决于两个方面因素:
第一个因素是证书有效期,证书的有效期在证书被颁发之日就已经确定了,例如CFCA规定个人证书的有效期是一年(可扩展),企业证书的有效期是三年。证书的有效期(Validity Period)作为一项内容被写进了数字证书之中,它用两个日期——证书开始生效的日期和证书失效的日期来表示。显然,已经过了有效期的证书不能通过验证。
证书有效期的设定是出于安全的考虑,当一张证书有效期将结束时,如果想继续使用就需要更新,证书更新时将产生新的公私密钥对,密钥定期更新对于证书的安全性是有好处的。
第二个因素是证书注销,虽然证书有效期没有过,但是如果发生了特殊情况,例如用户发现证书遗失或私钥失密,用户会向CA/RA提出注销证书的申请,CA/RA经过审核后将实施证书注销。那么,被注销的证书也不能通过验证。
第一种情况比较简单,证书的有效期就写在了证书之中,安全认证应用软件只要调出证书的内容,判断一下就知道这张数字证书当前是否还在有效期内。
第二种情况则比较复杂,证书一旦发出,是不可能收回的。怎么办呢?只能申请注销。所谓注销,就是要求当初颁发这张证书的单位(CA)出一张告示,宣布某张证书已经被注销作废,警告有关的交易者注意,不要再使用与这张证书绑定的公钥。在PKI安全认证体系中,这种“告示”称为证书注销列表(或证书撤销清单、证书注销清单、证书废止列表等),英文原文是Certificate Revocation List,缩写为CRL。
对于第二种情况,安全认证应用软件在验证证书的有效性时就需要去访问证书注销列表(CRL)。这个列表相当于“黑名单”,一旦发现通信对方的证书在这张列表中,就不能通过验证。
证书注销机制可以防止证书遗失或发现私钥失密后,不法分子冒用用户证书、私钥实行欺诈交易所带来的损失。这和信用卡注销、有效证件注销的机制十分类似。
注销证书的其他原因还包括:银行方面认为证书用户信用丧失、用户身份姓名发生改变、用户从他所属单位离职、岗位和职权发生变更等情况。
CRL的内容
根据X.509标准,CRL的内容和数据结构定义如下图所示:
CRL的内容包括CRL的版本号、计算本CRL的数字签名所用的算法的标识符(如加密算法RSA、数字摘要算法MD5等算法的标识符)、颁发CRL的CA的可识别名(DN)、CRL的发布/更新时间、被注销证书的列表(仅列出被注销证书的唯一序列号)以及扩展项。
扩展项中的内容有:
a、理由代码——指出该证书被注销的理由,如:密钥损坏、CA损坏、关系变动、操作终止等;
b、证书颁发者——列出该证书颁发者的名字;
c、控制指示代码——用于证书的临时冻结;
d、失效日期——列出该证书不再有效的日期。
为了保证CRL的真实性和完整性,CRL数据的后面附有颁发CRL的CA对CRL的数字签名。
CRL的发布
CRL的数据形成后,要把它公布在网上,放在哪里呢?首先,在CFCA的证书系统中,设置了一个LDAP服务器,它与互联网相连接,有特定的IP地址,CRL的数据就放在这里供用户查询。LDAP的全称是Lightweight Directory Access Protocol,即轻型目录访问协议。LDAP的信息模型是建立在“条目”(entries)的基础上,目录的基本信息单元是条目。目录条目呈现为一个层次状的树形结构。CRL的数据以条目的形式存放在LDAP服务器中。根据LDAP目录服务所具有的特性,用户可以在网上方便快捷地对CRL进行查询。
然而,CRL的数据集中存放在CA的服务器中可能带来另一个问题,就是当用户数量庞大,而且到了交易集中发生的高峰时期时,对LDAP服务器的并发访问可能造成网络和服务器的拥塞,致使交易效率急剧下降甚至超时。
解决这个问题有以下两个办法:
第一个办法是使用分段的CRL,就是把庞大的CRL分成很多可控的片段,并允许一个CA的证书注销信息通过多个CRL发布出来。在证书的扩展项中,有一个子项称为CRL分布点,它指出CRL分布点的分布位置,用户可以根据这个参数来访问相应的CRL。
第二个办法是建立远程的镜像LDAP服务器。这些镜像服务器分布在其他城市或一些大客户的所在地。CA的LDAP主服务器负责对这些镜像服务器进行定期数据更新,以便使镜像服务器的数据内容和主服务器保持一致。设置镜像服务器的目的有两个:一是加快当地用户访问目录服务器的响应时间。二是通过设置镜像服务器可以对大量的并发访问进行分流,减轻高峰时间LDAP主服务器的负担。此外,作为一种备份机制,镜像服务器还可以在主服务器故障期间起到备份作用,提供不间断服务,这就提高了整个系统的可用率。
CRL的更新
从安全的角度上讲,CRL最好是进行实时更新,即一旦发生证书注销事件就立即更新,以杜绝欺诈案件的得逞。但这种实时更新的代价非常高,要占用大量的网络资源和服务器资源,反过来又会影响到网上交易的进行。因此,业内普遍的做法是定期更新,如CFCA的管理策略是对主服务器的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也是令用户头疼的问题。有时候,这种CRL处理方式还要求用户配置客户PC来处理来自多个证书机构的CRL。
于是,另一种证书有效性的管理和查询方法,即在线查询机制应运而生。它使用的协议称为在线证书状态协议,英文是OCSP(Online Certificate Status Protocol)。
在线证书状态协议(OCSP)是IETF颁布的用于检查数字证书在某一交易时间是否有效的标准,在RFC 2560中有描述。它为网上业务提供了一种检验数字证书有效性的途径,比下载和处理证书注销列表(CRL)的传统方式更快、更方便和更具独立性。OCSP实时在线地向用户提供证书状态,其结果是它比CRL处理快得多,并避免了令人头痛的逻辑问题和处理开销。
OCSP在线查询机制的简单过程如下(见插图):
图:OCSP在线查询原理图
用户的客户机形成查询指定证书状态请求,并将请求转发到一个OCSP应答器(服务器),应答器建立与CA证书库的连接,并查询CA证书库而获得该证书的状态,应答器返回客户机有关证书有效性信息。
简单地说,一个OCSP请求,由协议版本号、服务请求类型及一个或多个证书标识符等信息所组成;响应信息是由证书标识符、证书状态——“有效”、“注销”或“未知”三个中的一个、以及验证相应时间等信息所组成。详细信息见下表所示。
表:OCSP响应信息
(引自CFCA OCA2系统CPS)
响应信息必须经过数字签名,以保证这个信息的真实性和完整性(未被篡改)。签名密钥属于CA,即颁发这张证书的权威、可信的第三方机构,因此,在任何情况下,用户都能够信任这个信息。
OCSP在线查询机制只能检测证书的注销状态,没有其他功能,例如不能检查证书的有效期,也不返回用户一个完全的证书。但是这种用法在某些应用场合下,对于验证证书的有效性来说是快速有效的。
由于使用OCSP在线查询必须保持用户在线状态,且用户访问的对象集中在CA的OCSP服务器上,这同样会带来高峰负载过重,交通拥塞效率下降的问题。
从以上的描述中我们可以看到,CRL和OCSP两种机制所针对的目标和实现的功能是一样的,只不过实现的方法途径不一样,两者具有异曲同工之妙。用户可根据自己的需求决定使用哪种方法,目前,CFCA对这两种方法都提供服务。
分享到:
相关推荐
总结来说,"revocation-endpoints:CRL和OCSP端点列表"是网络安全性的重要组成部分,用于验证数字证书的有效性,防止使用被撤销的证书进行不安全的通信。CRL和OCSP是两种不同的检查机制,各有优缺点,而正确的配置和...
OCSP(Online Certificate ...总的来说,OCSP和CRL是公钥基础设施中关键的组成部分,用于确保证书的有效性和安全性。"v3_ocsp.c"这个文件很可能包含了实现这些核心功能的代码,是理解OCSP协议及其应用的重要参考资料。
为了确保最佳的证书验证实践,许多系统采用了OCSP stapling和备用CRL机制,以平衡实时性、性能和可靠性。同时,CA/Browser论坛的指导原则规定了OCSP服务的最低标准,以维护整个PKI生态系统的安全性。 总之,OCSP是...
除了简单的有效性检查,源代码还可能包含更复杂的逻辑,如处理时区差异、检查证书链(中级CA证书和根CA证书)、以及处理证书吊销列表(CRL)或在线证书状态协议(OCSP)来确定证书是否已被撤销。 了解这些基本概念...
在数字证书验证中,SM3用于计算证书和证书链的哈希值,以便与证书颁发机构发布的哈希值进行比对,确认证书的有效性和未被篡改。 SM4分组密码算法则是一种对称加密算法,主要用于数据的加密和解密。它采用128位的...
OpenCA是一个开源的证书颁发机构(Certification Authority,CA)软件,它支持PKI(Public Key Infrastructure)基础设施的多种功能,包括证书签发、证书撤销列表(CRL)管理和OCSP服务。 OCSP是一种用于验证数字...
“ jsrsasign”(RSA-Sign JavaScript库)是一个免费的开源加密库,支持RSA / RSAPSS / ECDSA / DSA签名/验证,ASN.1,PKCS#1/5/8私钥/公钥,X.509证书,纯JavaScript中的CRL,OCSP,CMS SignedData,TimeStamp,...
Oracle OCSP(Online Certificate Status Protocol)是Oracle公司提供的一个用于验证X.509数字证书有效性的服务。这个jar包组包含了实现OCSP协议所需的Java类库,使得开发者能够在Java应用中集成OCSP验证功能,确保...
通过定期更新CRL,CA可以有效地管理证书的有效状态。此外,IETF提出了一种在线证书状态协议(OCSP),以更高效地检查证书的有效性。例如,Firefox 3默认使用OCSP协议来进行此类验证。 #### 证书结构 X.509v3证书的...
接着,RFC 5280详细描述了X.509 v2 CRL的格式,包括CRL的结构、发行者信息、撤销的证书序列号列表、有效性和签名。同时,文档也规定了一套必须包含在证书中的扩展,以确保互联网上的互操作性和安全性。 此外,文档...
本文将详细讨论“检查证书有效期的方法和装置”以及“内容信息显示方法和装置”的相关知识点,旨在帮助用户理解如何有效地验证和管理数字证书,以及如何优化信息显示,提升用户体验。 首先,检查证书有效期是网络...
该存储库包含Java 8的证书吊销列表(CRL)分发点和在线证书状态协议(OCSP)响应程序的实现。 概述 此应用程序是Dropwizard应用程序,可以响应给定CA的CRL请求和OCSP请求。 您需要为应用程序提供对CA索引文件的访问...
XCA(Cross Certificate Authority)是一款强大的证书颁发机构(CA)工具,主要用于生成、管理以及签发数字证书。...通过阅读提供的使用说明,你可以深入了解XCA的每个功能,并根据自己的需求来创建和管理证书。
4. 证书验证:certigo能检查证书的合法性,包括验证其签名、有效期、证书吊销列表(CRL)和在线证书状态协议(OCSP)。这对于发现即将到期的证书、无效签名或被吊销的证书至关重要。 5. 输出格式:certigo提供人性...
证书验证器 用于验证 X.509 证书或路径的 Python 库。 支持各种选项,包括:在特定时间进行验证、白名单和吊销检查。 特征 X.509 路径构建 X.509 基本路径验证 签名RSA、DSA 和 EC 算法 名称链接 有效期 基本约束...
总结来说,Netty的HTTPS双向认证和白名单证书验证涉及证书管理、SSL/TLS上下文配置以及自定义握手过程。正确实施这些步骤,可以确保在使用Netty构建的网络应用中实现高级别的安全性和身份验证。在处理敏感数据或需要...
例如,对于安全性要求极高的环境,可能会同时使用CRL和OCSP,以双重保险确保证书的有效性。 总的来说,CRL是确保网络通信安全的重要工具,它与证书生命周期管理紧密相关,是防止非法证书被使用的有效手段。理解并...
这份文档“行业文档-设计装置-数字证书的证书吊销列表缓存及查询方法”着重讨论了如何管理和查询数字证书的证书吊销列表(CRL,Certificate Revocation List)以及相关的缓存策略,以确保网络通信的安全和高效。...
证书检验是验证数字证书有效性的过程,包括检查证书的状态、签名、有效期、颁发者等信息。这个过程确保了与之交互的实体确实是其声称的身份,防止中间人攻击和其他安全威胁。证书检验系统一般会包含以下步骤: - *...
- **验证服务**:帮助用户确认证书的完整性和有效性。 **证书的信任链** 在X.509 PKI中,用户通过一条信任链验证证书。这条链从最终用户的根CA开始,通过一系列中间CA,直到找到证书的签发者。如果所有链接都成功...