應用概述
- 文本數據庫是跟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之前,都應該使用該選項進行更新。?