********************************************************************************************************************
声明:本文档根据openssl源代码、SSLeay Documents以及其它相关材料写成,转载需经本站授权,商业用途不得转载.本人能力有限,如有问题欢迎交流与指正。本站也欢迎原创作者投搞。
作者:Rainbow(不经历风雨,怎么见彩虹)
网站:
论坛:
/forum/index.php邮件:rainbow_zrh@sina.com webmaster@infosecurity.org.cn
OpenSSL版本:openssl-0.9.7d
投搞时间:2004-8-1
*********************************************************************************************************************/
【引言】
X509是系列的函数在我们开发与PKI相关的应用的时候我们都会用到,但是OpenSSL中对X509的描述并不是很多,鉴于些,我将以前工作与学习过程的经验整理出来,供大家参考,不用多走弯路,可以将精力集中在自己要处理的业务逻辑上,同时也希望更多的人参与到研究与整理信息安全的理论与技术中来,提高中国的科研与应用技术水平。提高中国信息安全意识与能力从我做起。
【X509概述】
X.509是国际标准化组织CCITT建议作为X.500目录检索的一部分提供安全目录检索服务。一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息一种非常通用的证书格式,所有的证书都符合X.509 国际标准。目前X.509有不同的版本,例如 X.509 V2和x.509 v3都是目前比较新的版本,2000年还推出V4版本,但是都在原有版本基础上进行功能的扩充,其中每一版本必须包含下列信息:
(1) 用来区分X.509的不同版本号既版本号
(2) 由CA给予每一个证书的分配的编号即序列号;
(3) 用于产生证书所用的方法以及一切参数即签名算法
(4) CA的x.500名字即发出该证书的认证机构
(5) 证书有效的时间包括两个日期,在所指定的两个时间之 间有效即有效期限
(6) 证书持有人的姓名、服务处所等信息即主题信息
(7) 认证机构的数字签名
(8) 被证明的公钥值,加上使用这个公钥的方法名称即公钥信息
【X.509证书格式】
X.509是另一种非常通用的证书格式。所有的证书都符合ITU-T X.509国际标准;因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用。但实际上,不同的公司对X.509证书进行了不同的扩展,不是所有的证书都彼此兼容。在一份证书中,必须证明公钥及其所有者的姓名是一致的。对PGP证书来说,任何人都可以扮演认证者的角色。对X.509证书来说,认证者总是 CA或由CA指定的人(其实PGP证书也完全支持使用CA来确认证书的体系结构),一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。X.509标准定义了证书中应该包含哪些信息,并描述了这些信息是如何编码的(即数据格式),所有的X.509证书包含以下数据:
(1)X.509版本号:指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息。目前的版本是3。
(2)证书持有人的公钥:包括证书持有人的公钥,算法(指明密钥属于哪种密码系统)的标示符和其他相关的密钥参数。
(3)证书的序列号:创建证书的实体(组织或个人)有责任为该证书指定一个独一无二的序列号,以区别于该实体发布的其他证书。序列号信息有许多用途;比如当一份证书被回收以后,它的序列号就被放入证书回收列表(CRL)之中。
(4)证书持有人唯一的标示符:(或称DN-distinguished name)这个名字在 Internet上应该是唯一的。DN由许多部分组成,看起来象这样:
CN=Bob Allen, OU=Total Network Security Division,
O=Network Associates, Inc., C=US
这些信息指出该科目的通用名,组织单位,组织和国家
(5)证书的有效期:证书起始日期和时间以及终止日期和时间;指明证书何时失效。
(6)证书发布者的唯一名字:这是签发该证书的实体的唯一名字。通常是CA。.使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书)
(7)发布者的数字签名:这是使用发布者私钥生成的签名。
(8)签名算法的标示符:指明CA签署证书所使用的算法。
X.509证书和PGP证书之间有许多不同,最明显的如下所述:
(1) 用户可以创建自己的PGP证书,但是必须向CA请求才能得到一份X.509证书。
(2)X.509证书天生只支持密钥拥有者的一个名字。
(3)X.509证书只支持证明密钥合法性的一个数字签名。
要获得一份X.509证书,必须请求CA发给你证书。用户提供自己的公钥,证明自己拥有相应的私钥,并提供有关自己的某些特定信息。然后在这些信息上数字签名,并将整个数据包(称为证书请求)发给CA。CA做一些努力来验证用户提供的信息是正确的,然后就生成证书并返回给用户。
【OpenSSL对X509的支持】
以下是我自己对OpenSSL的理解,可以表达上不是很准确。
(1) 证书请求管理
(2) 证书生成
(3) 证书吊销及CRL管理
(4) X509名字管理
(5) 属性管理
(6) 扩展管理
(7) 验证及信任管理
在随后的一些篇幅中将对以上的这几个方面进行展开说明。