应用概述
- 文本数据库是跟OpenSSL的CA应用程序紧密结合在一起的,它以文本的方式记录CA已经签发的证书的状态和摘要信息。这些状态信息可以用于跟证书库相关的一些操作,比如使用ca指令生成CRL主要就是读取这个文本数据库的信息作为参考。文本数据库就是普通的文本文件,在使用之前,需要先建立一个空文件作为文本数据库,名字和后缀名都是无所谓的。ca指令使用的文本数据库文件可以在配置文件中指定,相关参数是CA主配置字段的database选项。
- 默认的文本数据库文件是index.txt文件,在OpenSSL根目录的apps/demoCA目录下,该文件已经包含了OpenSSL提供的演示证书的一些信息。当然,如果你要使用自己的CA证书,那么该文件应该首先清空。上述的初始工作,包括文本数据库文件的建立等CA目录结构的构造,可以手动完成,也可以使用OpenSSL的Perl脚本CA.pl完成。
- OpenSSL提供了管理和读写文本数据库的接口函数,它们都在crypto/txt_db目录下,函数不多,很容易理解和使用,当然,这是基于你阅读下面的一节———即你对文本数据库的结构已经有所了解的基础上。
数据结构
- OpenSSL的文本数据库结构非常简单,每一行代表一条完整的记录,每条记录对应一个已经签发的证书。一般来说,每条记录包括六个可选的字段,分别是:证书状态、证书生效时间、证书到期时间、证书序列号、证书存放路径及证书的特征名称(DN)值。其中,证书生效时间是可选项,有些记录是可以不填写的。下面是文本数据库中一条完整记录
- 证书状态字段是文本数据库记录中的关键字段,也是第一个字段,ca指令产生CRL列表就是根据证书中的状态信息作为依据的。
- 状态字段的可选值有三个,分别是V(Valid),R(Revoked)和E(Expire),代表有效、吊销和过期三种证书状态。
- 依次可知,上述记录对应的证书状态是已经吊销了(R)。
- 第二个字段是证书到期时间字段,保存的时间已经换算成格林威治时间。时间格式在前面的章节已经介绍过,这里不再重复。在上述的例子中,证书到期的时间是03年11月5日23时32分5秒。
- 第三个字段是证书生效时间,格式同证书到期时间的格式。证书生效时间是可选的字段,在文本数据库的记录中不一定要存在,比如你签发证书的时候没有指定生效时间而是使用默认的当前时间作为生效时间,那么在文本数据库的相应记录中就不会存在该项。
- 第四个字段是证书序列号,以十六进制的格式表示。证书库中的每个证书的序列号都是不同的。
- 第五个字段是证书存储路径,指明了生成的证书存储的具体位置。该目录选项有时候可能由于ca指令某些参数使用的原因导致没有办法填写,这时候就标记为“unknown”,但是,这不会影响证书库的正常使用。如果你在使用ca指令的时候已经指定了证书输出文件,那么就会标记路径字段为“unknown”。
- 第六个字段也是一个重要的字段,就是记录对应的证书的特征名称(DN),也即是证书中的主题名。在OpenSSL的文本证书库中,ca指令要求必须保证签发的证书具有不同的DN值,否则就不能成功签发证书,这是因为OpenSSL将DN值作为文本数据库一个索引。
- 当然,这种限制跟实际应用的情况可能会有所不同,比如,有些情况下同一个人可能要申请多个证书用于不同的目的,E-mail或者Web访问,这就会引起矛盾。如果证书吊销的时候使用了吊销原因的选项(ca指令的crl_reason选项),那么在被吊销的证书相应的记录中,还可能会添加一到两个字段注明吊销原因,下面就是两条使用了吊销原因的记录:
- 文本数据库的记录生成之后,一般来说,以后可能修改的字段就是证书状态字段,当证书被吊销后,证书状态字段会发生改变。对于过期的证书,文本数据库并不会自动更新,需要使用ca指令的-updatedb选项进行更新,一般来说,在生成CRL之前,都应该使用该选项进行更新。