Openssl中的crl数据结构定义在crypto/x509/x509.h中。
1) X509_REVOKED
typedef struct X509_revoked_st
{
ASN1_INTEGER *serialNumber;
ASN1_TIME *revocationDate;
STACK_OF(X509_EXTENSION) *extensions;
int sequence;
} X509_REVOKED;
本结构用于存放一个被撤销证书的信息,各项意义如下:
serialNumber:被撤销证书的序列号;
revocationDate:撤销时间;
extensions:扩展项,可选;
sequence:顺序号,用于排序,表示当前被撤销证书信息在crl中的顺序。
2)X509_CRL_INFO
typedef struct X509_crl_info_st
{
ASN1_INTEGER *version;
X509_ALGOR *sig_alg;
X509_NAME *issuer;
ASN1_TIME *lastUpdate;
ASN1_TIME *nextUpdate;
STACK_OF(X509_REVOKED) *revoked;
STACK_OF(X509_EXTENSION) *extensions;
ASN1_ENCODING enc;
} X509_CRL_INFO;
crl信息主体,各项意义如下:
version:crl版本;
sig_alg:crl签名法;
issuer:签发者信息;
lastUpdate:上次更新时间;
nextUpdate:下次更新时间;
revoked:被撤销证书信息;
extensions:扩展项,可选。
3) X509_CRL
struct X509_crl_st
{
X509_CRL_INFO *crl;
X509_ALGOR *sig_alg;
ASN1_BIT_STRING *signature;
int references;
} ;
完整crl数据结构,各项意义如下:
crl:crl信息主体;
sig_alg:签名算法,与X509_CRL_INFO中的一致;
signature:签名值;
references:引用。
上述三个结构的DER编解码通过宏在crypto/asn1/x_crl.c中实现,包括new、free、i2d和d2i函数。