4.4 X.509证书
目录
证书
获得用户证书(重点)
证书撤销
X.509版本3
X.500系列推荐标准定义了一套目录服务。所谓目录服务,实际上是指用于维护用户信息数据库的一个或一组分布式服务器。这些信息包括从用户名到网络地址的映射关系,以及其他关于用户的属性和信息。
X.509是X.500推荐标准系列的一部分,X.509定义了一个使用X.500目录向其用户提供认证服务的框架。该目录可以作为公钥证书存储库。
每个证书都包括用户的公钥,并由一个可信任的认证中心(CA,Certificate Authority)用私钥签名。
除此之外,X.509定义了另一个基于使用公钥证书的认证协议。
X.509标准很重要!!!
这是因为X.509中定义的证书结构和认证协议在很多环境下都会使用。例如S/MIME(第7章)、IP安全(第8章)和SSL/TLS(第5章)。
X.509基于公钥加密体制和数字签名的使用。
这个标准并没有强制使用某个特定的算法,但是推荐使用RSA。数字签名方案假定需要使用散列函数。同样,这个标准也没有强制使用某种特定的散列算法。
公钥证书的产生过程:

证书
公钥证书是由可信任的CA创建的,它放在目录中。目录服务器本身不负责公钥的产生和认证功能;它只为用户获取证书提供一个容易访问的场所。
证书的一般结构:

此标准采取以下表示法来定义一个证书:
CA << A >>= CA {V, SN, AI, CA, UCA, A, UA, ,
}
其中:
Y<<X>>=由认证中心 Y 发放的用户 X 的证书;
Y{I}=Y对1的签名,它包括I,并在其后追加一个加密过的散列码;
V=证书的版本;
SN=证书的序列号;
AI=签名算法标识符;
CA=认证中心名称;
UCA=可选的CA唯一标识符;
A=用户A名称;
UA=可选的用户A唯一标识符;
Ap=用户A的公钥;
=证书的有效期。
CA用它的私钥对证书进行签名。如果一个用户知道该CA的公钥,那个用户就可以验证由CA签名过的证书是否合法。这是典型的数字签名方法。
获得用户证书(重点)
有CA生成的用户证书的特点:
- 任何可以访问CA公钥的用户都可以验证此经过签名的用户公钥。
- 只有认证中心才可以修改用户证书而不会被发现。
由于证书是不可伪造的,它们可以放在目录中,而不需要目录采取特殊的措施来保护它们。
在有许多用户的情况下,使用多个CA是更可行的方法,其中每个CA都将它的公钥安全地提供给一部分用户。
现在假定A从认证中心X处得到证书,而B从认证中心Y处得到证书。如果A不能安全地知道Y的公钥,那么由Y发放给B的证书对A来说没有用处。A可以读取B的证书,但不能验证签名。
但是,如果两个CA之间已经安全地交换了它们的公钥,下面的过程使A得到B的公钥:
(1)A从目录中得到经过X签名的Y的证书。由于A安全地知道X的公钥,A可以从Y的证书中得到它的公钥,并通过X对该证书的签名验证它。
(2)之后,A返回目录并得到由Y签名的B的证书。由于A现在已经可以信任Y的公钥副本,所以A可以对签名进行验证,并安全地得到B的公钥。
A使用一个证书链来得到B的公钥:X<<Y>>Y<<B>>,对于B则是:Y<<X>>X<<A>>

被连接起来的圆圈表明CA之间的层次关系。与此相关联的方框表明了在每个CA目录入口中存储的证书。每个CA的目录入口都包含如下两种类型的证书:
- 前向证书:由其他CA生成的X的证书;
- 反向证书:由X生成的其他CA的证书。
(注意:上面的X<<Z>>和Z<<X>>是没有的,不然的话X和Z之间应该有一条连线)
这样,A要获得B的公钥,可以通过:X<<W>>W<<V>>V<<Y>>Y<<Z>>Z<<B>>.
证书撤销
前面中显示每个证书都包含一个有效期,新证书要在老证书过期前发放。另外,在下面情况中不管证书有没有过期都希望撤销:
(1)用户的私钥被认为已泄露。
(2)用户不再被CA信任。
(3)CA的证书被认为已泄露。
这些证书撤销列表(CRL)也都应该存放在目录中。
当用户从消息中得到证书时,必须要确定证书是否被撤销。用户可以在每次收到证书时检查目录。为了避免由目录搜索带来的延迟和可能的消耗,用户可以维护一个记录证书和被撤销证书列表的本地缓存。
X.509版本3
版本2不能满足以下要求:
(1)主体域不能胜任将密钥所有者的身份传递给公钥用户。X.509的名称相对来说可
能有些短,并且缺乏用户可能需要的显而易见的身份细节。
(2)主体域也不能胜任许多应用,这些应用一般通过互联网电子邮件地址、URL或其
他与网络相关的标识来辨认实体。
(3)需要标明安全策略方面的信息。这可以使得一个诸如IPSec之类的安全应用或安
全功能能够将X.509证书与给定的安全策略联系起来。
(4)需要通过设定对特定证书适用性的约束来限制出故障的或恶意的CA造成的危害。
(5)具有识别同一用户在不同时间使用的不同密钥的能力是重要的。这种特性可以支
持密钥的生命周期管理,特别是在通常或特殊情况下更新用户和CA之间密钥对的能力。
标准开发者采用在版本2格式中附加可选扩展的方式,这样更加灵活。
每个扩展包括一个扩展标识、一个危险指示符和一个扩展值。危险指示符用来指示一个扩展是否可以被安全地忽略。如果危险指示符的值为True,而一个执行程序没有辨认出此扩展,则它必须把此证书当作无效的。
证书扩展可分为三个主要类型:密钥和策略信息、主体和发放者属性以及认证路径约束。
密钥和策略信息。这些扩展传送关于主体与发放者密钥的附加信息和证书策略指示符。
证书策略是一个命名的规则集,它被用来指示证书对于一个特定的具有相同安全需求的团
体和/或应用类别的适用性。例如,一个策略可用于对一定价格范围内商品贸易的电子数据
交换(EDI)交易进行认证。