一、X.509证书简介
X.509是国际电信联盟-电信(ITU-T)部分标准和国际标准化组织(ISO)的证书格式标准。作为ITU-ISO目录服务系列标准的一部分,X.509是定义了公钥证书结构的基本标准。1988年首次发布,1993年和1996年两次修订。当前使用的版本是X.509 V3,它加入了扩展字段支持,这极大地增进了证书的灵活性。X.509 V3证书包括一组按预定义顺序排列的强制字段,还有可选扩展字段,即使在强制字段中,X.509证书也允许很大的灵活性,因为它为大多数字段提供了多种编码方案。X.509 V4版已经推出。它是一种行业标准或者行业解决方案,在X.509方案中,默认的加密体制是公钥密码体制。为进行身份认证,X.509标准及公共密钥加密系统提供了数字签名的方案。用户可生成一段信息及其摘要(亦称作信息”指纹”)。用户用专用密钥对摘要加密以形成签名,接收者用发送者的公共密钥对签名解密,并将之与收到的信息”指纹”进行比较,以确定其真实性。此问题的解决方案即X.509标准与公共密钥证书。本质上,证书由公共密钥加密钥拥有者的用户标识组成,整个字块有可信赖的第三方签名。典型的第三方即大型用户群体(如政府机关或金融机构)所信赖的CA。 相关资料:
二、X.509证书的结构
1.X.509证书基本部分
1.1版本号
标识证书的版本(版本1、2、3)
1.2序列号
标识证书的唯一整数,由证书颁发者分配的本证书的唯一标识符
1.3签名
用于签证书的算法标识,由对象标识符加上相关的参数组成,用于说明本证书所用的数字签名算法。例如,SHA-1和RSA的对象标识符就用来说明该数字签名是利用RSA对SHA-1杂凑加密
1.4颁发者
证书颁发者的可识别名(DN)
1.5有效期
证书有效期的时间段。本字段由 ”Not Before” 和 “Not After” 两项组成,他们分别由UTC时间或一般的时间表示(在RFC2459中有详细的时间表示规则)
1.6主体
证书拥有者的可识别名,该字段必须为非空的,除非在证书拓展中有别名
1.7主体公钥信息
主体的公钥(以及算法标识符)
1.8颁发者唯一标识符
标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项
1.9主体唯一标识符
证书拥有者的唯一标识符,仅在版本2和版本3中有要求,属于可选项
2.X.509证书拓展部分
可选的标准和专用的拓展(仅在版本2和版本3中使用),拓展部分的元素都有这样的结构:
Extension ::= SEQUENCE {
extnID OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING
}
extnID:表示一个拓展元素的OID
critical:表示这个拓展元素是否极重要
extnValue:表示这个拓展元素的值,字符串类型
拓展部分包括:
2.1发行者密钥标识符
证书所含密钥的唯一标识符,用来区分同一证书拥有者的多对密钥
2.2密钥使用
一个比特串,指明(限定)证书的公钥可以完成的功能或服务,如:证书签名、数据加密等 如果某一证书将KeyUsage拓展标记为”极重要”,而且设置为”keyCertSign”,则在SSL通信期间该证书出现时将被拒绝,因为该证书拓展表示相关私钥应只用于签写证书,而不应该用于SSL
2.3CRL分布点
指明CRL的分布地点
2.4私钥的使用期
指明证书中与公钥相联系的密钥的使用期限,它也有Not Before 和 Not After组成。若此项不存在时,公私钥的试用期是一样的
2.5证书策略
由对象标识符和限定符组成,这些对象标识符说明证书的颁发和使用策略有关
2.6策略映射
表明两个CA域之间的一个或多个策略对象标识符的等价关系,仅在CA证书里存在
2.7主体别名
指出证书拥有者的别名,如电子邮件地址、IP地址等,别名是和DN绑定在一起的
2.8颁发者别名
指出证书颁发者的别名,如电子邮件地址、IP地址等,但颁发者的DN必须出现在证书的颁发者字段
2.9主题目录属性
指出证书拥有者的一些列属性。可以使用这一项来传递访问控制信息
X.509文档:RFC5280
Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
三、X.509证书实例
四、工作原理
X.509给出的鉴别框架是一种基于公开密钥体制的鉴别业务密钥管理。用户拥有两把密钥—公钥、私钥。在发送文件之前,用户可以用加密算法对信息加密,然后用接收者的公钥再次加密,而接受者就可以用自己的私钥对其解密。该框架允许用户将其公钥放在CA的目录项中,用户想与其他用户通信,就可以直接从对方的目录项中获得相应的公开密钥,用于各种安全服务
解析X.509证书过程:
1.从磁盘上的证书文件中读取证书数据(证书数据长度)
2.获取CertContext
3.获取证书信息(证书版本号、证书SN、证书颁发者、证书主题、有效起始日期、有效终止日期)
4.创建临时密钥容器
5.向容器中导入公钥,获取公钥句柄
6.导出公钥(最好采用二次调用方式)
7.获取公钥信息
8.清理工作