28.1 CRL介绍
证书撤销列表(Certificate Revocation List, 简称CRL),是液体中包含撤销的证书列表的签名数据结构。CRL是证书撤销状态的公布形式,CRL就像信用卡的黑名单,用于公布某些数字证书不在有效。
CRL是一种离线的证书状态信息。他一一定的周期进行更新。CRL可以分为完全CRL和增量CRL。在完全CRL中包含了所有的被撤销证书信息,增量CRL由一些列的CRL来表明被撤销的证书信息,他每次发布的CRL是对签名发布CRL的增量扩充
基本的CRL信息由:
被撤销证书序列号
撤销时间
撤销原因
签名者
CRL签名等
28.2
数据结构
typedef struct X509_revoked_st
{
ASN1_INTEGER serialNumber; 被撤销证书的序列号
ASN1_TIME *revocationDate; 撤销时间
STACK_OF(X509_EXTENSION) *extensions; 扩展项
STACK_OF(GENERAL_NAME) *issuer;
int reason;
int sequence;
}
typedef struct X509_ctl_info_st {
ASN1_INTEGER *version; crl版本
X509_ALGOR sig_alg; crl签名法
X509_NAME *issuer; 签发者信息
ASN1_TIME *lastUpdate; 上次更新时间
ASN1_TIME *nextUpdate; 下次更新时间
STACK_OF(X509_REVOKED) *revoked; 被撤销证书信息
STACK_OF(X509_EXTENSION) *extensions; 扩展项
ASN1_ENCODING enc;
}
struct X509_crt_st {
X509_CRL_INFO crl;
X509_ALGOR sig_alg;
ASN1_BIT_STRING signature;
CRYPTO_REF_COUNT refernces;
int flags;
AUTHORITY_KEYID *akid;
ISSUING_DIST_POINT *idp;
int idp_flags;
int idp_reasons;
ASN1_INTEGER *crl_number;
ASN1_INTEGER *base_crl_number;
STACK_OF(GENERAL_NAMES) *issuers;
unsgined char sha1_hash【SHA_DIGEST_LENGTH】
const X509_CRL_METHOD *meth;
void *meth_data;
CRYPTO_RWLOCK *lock;
}
28.3 CRL函数
CRL函数主要是set和get函数
函数
|
功能
|
X509_CRL_add0_revoked
|
添加一个被撤销证书的信息
|
X509_CRL_print
|
打印crl内容到BIO中
|
X509_CRL_print
|
将crl的内容输出到fp中,词函数调用了X509_CRL_print
|
X509_CRL_set_issuer_name
|
设置crl的颁发着
|
X509_CRL_set_lastUpdate
|
设置crl的颁发者
|
X509_CRL_set_nextUpdate
|
设置crl下次发布时间
|
X509_CRL_set_version
|
设置crl版本
|
X509_CRL_sign
|
对crl进行签名,pkey为私钥,md为摘要算法,结果存放在x->signature中
|
X509_CRL_sort
|
根据证书序列号对crl排序,此函数实现了采用了堆栈排序,堆栈的比较函数为X509_REVOKED_cmp
|
X509_CRL_add1_ext_i2d
|
添加CRL扩展,nid为要添加的扩展标识,value为被添加的具体扩展项的内部数据结构地址,crit表明是否为关键阔啊站,flags表明何种操作。
|
X509_CRL_add_ext
|
添加扩展项到指定堆栈位置,此函数调用X509v3_add_ext
|
X509_CRL_cmp
|
CRL比较,此函数调用X509_NAME_cmp,值比较颁发者的名字是否相同
|
X509_CRL_delete_ext
|
删除CRL扩展项堆栈中的某一项,loc指定被删除项在堆栈中的位置
|
X509_CRL_digest
|
CRL摘要,本函数 对X509_CRL进行摘要,type指定摘要算法,摘要结果存放在md中
|
X509_CRL_dup
|
CRL数据拷贝,此函数通过宏来实现。
|
X509_CRL_get_d2i
|
CRL中获取扩展项,此函数用于获取crl中制定扩展项的内部数据结构,返回值为具体的扩展项数据结构地址,nid为扩展表示,他调用了X509V3_get_d2i函数
|
X509_CRL_get_ext_by_NID
|
获取扩展项在其堆栈中的位置,nid为扩展项标识,lastpos为搜索起始位置。
|
X509_CRL_get_ext_by_OBJ
|
获取扩展项在其堆栈中的位置
|
X509_CRL_get_ext_by_count
|
获取crl中扩展项的个数
|
X509_CRL_verify
|
验证CRL.EVP_PKEY结构中需要给出公钥
|