中科大型白癜风公益援助 http://www.jk100f.com/baidianfengzixun/zhiliaowuqu/43734.html
今天继续介绍一下数字证书里一些重要的概念和知识点。
双证书
在实际应用中,证书颁发机构(CA)一般为用户颁发双证书,也就是为申请证书的用户同时颁发两张证书,并告知用户其中一张是用来加密,即加密证书,另一张用来签名,即签名证书。这两张证书的主要信息是一致的,如证书持有人,颁发机构,有效期等,但证书对应的密钥对和密钥用法不同。
我们可以通过查看证书——详细信息——密钥用法查看证书是加密证书还是签名证书。加密证书对应的密钥对用于数据的非对称加解密;签名证书对应的密钥对用于数据的数字签名及验证。
按理说,一对公私钥就可以完成加解密和数字签名,为什么要分成两对公私钥分别完成呢?这还是由密钥的使用用途决定的。密钥用于数字签名时,保证的是签名行为的不可否认性,因此私钥必须由签名者自己持有保存,如果私钥遗失,只要重新申请颁发即可,不会影响已完成数字签名的验证;而密钥用于数据加密时,保证的是数据的机密性,如果私钥遗失,则已经加密的数据无法解密,因此必须有机制将私钥保存备份在第三方(如CA),以备私钥遗失情况下数据仍能解密。由此可见,签名和加密对密钥的保存备份要求是不一样的。所以合理的做法是将用于签名和加密的密钥分开,并采用不同的管理保存策略,已达到安全性和可用性的平衡。
在Windows的Crypto/API体系中,加密证书也可以用于签名,但签名证书不能用于加密。
CRL
CRL是CertificateRevocationList的简称,即证书吊销列表。它是CA发布证书有效信息的一种机制。CA将它发布的,并且已吊销的证书添加在CRL里,同时定期对外发布CRL。应用系统拿到CRL后,在列表中寻找将要验证的证书,以确定证书是否已经被颁发机构吊销。这个过程看上去没什么问题,但在实际应用中是有不少坑。
第一是应用系统如何拿到CRL。一般情况下,CA在颁发证书时会将CRL地址写在证书里,通过查看证书——详细信息——CRL分发点,可以查看到相关信息。
如果应用系统在需要下载或更新CRL时访问不了这个CRL地址,不仅不能得到CRL,可能还会产生其他问题,比如AdobeReader的程序卡死,失去响应。
第二是应用系统更新CRL的策略问题。在CRL中包含本次更新日期和下次更新日期两个字段,应用系统可由这两个日期信息确定当前拥有的CRL是否是最新的,进而决定是否下载更新。这样就不可避免的出现吊销延迟的问题,即当前证书在CA端已经吊销了,但由于CRL还未到更新的时候,应用系统仍使用本地当前CRL,会认为已经被吊销证书有效。而且CRL在实际使用中的更新策略更加复杂(至少在Windows中是这样),进一步加剧了吊销延迟的不确定性。
第三是随着时间的推移,证书吊销列表会越来越长,即CRL数据会越来越大。下载CRL消耗的带宽资源和时间也会水涨船高,这对应用系统的稳定性和用户使用体验都会产生不利影响。
CRL出现那个时代,网络还不是很发达,为了减少CA服务器的压力,故采用在线下载,离线使用的方式发布证书吊销情况。虽然出现了一些改良的CRL产生和分发方法,但总体来讲,CRL已经不适合现在的互联网应用环境,也无法满足对证书验证实时性的要求。
OCSP
OCSP是指OnlineCertificateStatusProtocol,即在线证书状态协议。针对CRL的问题,OCSP提出了在线查询证书有效状态的解决方案,即可以实时返回所验证证书在CA的吊销状态。OCSP刚被提出时是CRL的一个补充,现在已经完全取代了CRL。在我自己做过的产品项目中,凡是查询证书吊销状态也都是使用OCSP或类似方式,没有人再用CRL了。证书——详细信息——颁发机构信息访问中包含了OCSP的地址信息。
在实践中,很多CA并不采用标准的OCSP协议,而是提供一个自己开发的证书有效性验证Web服务接口,应用系统通过此接口同样可以实时验证证书有效性。
证书有效期
证书有效期本身没有什么好说的,现在第三方CA颁发的证书一般有效期是一年。但要说明两点:一是操作系统是根据当前系统时间判定证书是不是在有效期内。所以如果证书已经过了有效期,你又急着用,可以通过修改系统时间使证书重新“有效”。当然,这里的“有效”仅仅是显示有效,拿到其他未修改系统时间的环境里,又会恢复成无效。这也从一个侧面反映了系统时间是不牢靠的,安全的数字证书应用需要时间戳和实时在线验证。二是颁发证书有效期遵循“最短木板”原理,即证书的有效期是它自身和所在证书链上所有上级证书有效期中最近的那一个。比如根据CA策略,本来证书是颁发一年后到期,但颁发机构的证书是从现在起半年后到期,则现在颁发证书的有效期也就是颁发机构的证书的有效期了。
证书更新
既然证书有有效期,那到期之后就有更新的问题了。一般的证书更新只是更新证书的有效期,其他都不变。但实际中还有很多其他类型的“更新”,比如证书的密钥对都变换了,和更新前证书唯一相同的就只有持有人的名字了,因为对于用户来讲,只要使用证书的用户不变,那也是更新的证书,而不是重新颁发的另外一张证书。对于应用来讲,需要通过证书更新前后不变的信息,来建立更新后证书与更新前证书的对应关系,以延续其业务逻辑。只要说是证书更新,那证书里至少有一块信息是不变的。
RA
RA(RegistrationAuthority),数字证书注册审批机构。RA系统是CA的证书发放、管理的延伸。也就是说,我们很可能是通过RA而不是直接跟CA系统打交道获得数字证书服务的。RA在项目用到的比较多。比如某个项目里可能颁发证书较多,用户都去CA直接申请证书比较麻烦,不适合项目实施。那CA就可以为这个项目专门部署一个RA,项目的用户直接去这个RA申请证书,而RA可以实行不同于上级CA的、根据项目情况定制过颁发策略,以利于项目的实施推进。当然对于应用系统来讲,证书服务来自RA还是CA并没有什么本质区别。