主要函数1 )X509_STORE_add_cert
将证书添加到X509_STORE中。
2 )X509_STORE_add_crl
将crl添加到X509_STORE中。
3 ) void http://www.Sina.com/(x509 _ store * CTX,long flags ) ) )。
为ctx中的flags分配flags会指示验证证书时必须验证的项目。
4 ) X509_TRUST_set_default
设置默认的X509_TRUST检查函数。
5 ) intx509_verify(x509*a,EVP_PKEY *r ) ) ) ) ) )。
验证证书签名。
6 )X509_STORE_set_flags
证书,使用方法请参照apps/verify.c。
7 )X509_verify_cert
根据错误编号,获取错误消息。
8 ) X509_add1_ext_i2d
根据特定扩展项的数据结构添加扩展项。
9 ) X509_add_ext
将条目添加到X509_EXTENSION堆栈中的指定位置。
10 ) X509_ALGOR_dup
算法的副本。
11 ) x509 _ alias _ get0/x509 _ alias _ set1
获取/设置别名。
12 ) X509_asn1_meth
获取X509的ASN1_METHOD。 它包括new、free、i2d和d2i函数。
13 ) X509_certificate_type
获取证书和公钥的类型。
14 ) int x509 _ check _ issued (x509 * issuer,X509 *subject );
检查subject证书是否由issuer颁发,如果是,则返回X509_V_OK,即0。
15 ) X509_check_private_key
检查私钥是否与证书的公钥匹配,如果匹配,则返回1。
16 ) X509_cmp
证书比较。
17 ) int x509 _ CMP _ current _ time (asn1 _ time * s ) )
将s与当前时间进行比较,如果返回值小于0,则s早于当前时间,如果大于0,则s慢于当前时间进行比较。
18 ) intx509_CMP_time(ASN1_time*CTM,time_t *cmp_time ) ) ) ) ) ) ) ) ) )0)
当ctm时间晚于cmp_time时,返回值大于0。
19 ) X509_delete_ext
删除扩展项目堆栈中指定位置的扩展项目。
20 ) X509_digest
根据指定的摘要算法摘要X509结构。
20 ) X509_dup
复制函数。
21 )X509_verify_cert_error_string
根据颁发者的X509_NAME名称和证书序列号搜索并返回X509堆栈中的相应证书。
22 ) X509_find_by_subject
根据所有者名称从证书堆栈中查询并返回证书。
23 ) X509_get0_pubkey_bitstr
获取X509结构中的DER编码公钥信息。
24 )X509_find_by_issuer_and_serial
加载证书和crl以验证证书。
25 ) X509_PURPOSE_get0
根据X509_PURPOSE的位置获取对应的X509_PURPOSE。
26 ) X509_PURPOSE_get0_name
获取X509_PURPOSE的名称。
27 ) X509_PURPOSE_get0_sname
获取X509_PURPOSE的别名。
28 ) X509_PURPOSE_get_by_id
根据证书的用途ID获取X509_PURPOSE在当前数组(xstandard )或堆栈(xptable )中的位置。 如果没有返回-1。
29 ) X509_PURPOSE_get_by_sname
基于别名获取对
应的X509_PURPOSE在数组或堆栈中的位置。30)X509_PURPOSE_get_count
获取所有的X509_PURPOSE个数,包括标准的和用户动态添加的。
31)X509_PURPOSE_get_id
获取X509_PURPOSE的ID。
32) int X509_PURPOSE_set(int *p, int purpose)
检查是否有purpose标识的X509_PURPOSE,并将purpose值写入p。
33) STACK_OF(X509_EXTENSION) X509v3_add_ext
(STACK_OF(X509_EXTENSION) **x, X509_EXTENSION *ex, int loc)
添加扩展项,堆栈操作,将ex表示的扩展项根据loc指定的位置插入到X509_EXTENSION堆栈中。
34) X509v3_delete_ext
堆栈操作,去除指定位置的扩展项。
35)int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext,
unsigned long flag, int indent)
本函数用于打印单个扩展项,out为BIO类型的输出对象,ext为扩展项,flag表明不支持扩展项的处理方式,indent表明输出时第一列的位置。
flag的值在x509v3.h中定义,可以有:
Ø #define X509V3_EXT_DEFAULT 0
打印DER编码内容,调用M_ASN1_OCTET_STRING_print。
Ø #define X509V3_EXT_ERROR_UNKNOWN (1L << 16)
打印一行语句。
Ø #define X509V3_EXT_PARSE_UNKNOWN (2L << 16)
分析扩展项的DER编码,并打印。
Ø #define X509V3_EXT_DUMP_UNKNOWN (3L << 16)
打印出DER编码的内容,调用BIO_dump_indent。
36)int X509V3_extensions_print(BIO *bp, char *title,
STACK_OF(X509_EXTENSION) *exts, unsigned long flag, int indent)
本函数将堆栈中的所有扩展项打印,参数意义同上。
37) int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *sk, int crit, int lastpos)
获取扩展项在堆栈中的位置,crit表面扩展项是否关键,lastpos为指定堆栈搜索起始位置。此函数从给定的lastpos开始搜索扩展项堆栈,找到与crit匹配的扩展项后,返回其位置,如果找不到扩展项,返回-1。
38)int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, int nid,
int lastpos)
获取扩展项在其堆栈中的位置,此函数根据扩展项标识nid以及堆栈搜索的起始进行搜索,如果找到,返回它在堆栈中的位置,如果没找到,返回-1。
39) int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *sk, ASN1_OBJECT *obj, int lastpos)
功能同上。
40)X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x,
int loc)
获取扩展项,loc为扩展项在堆栈x中的位置,如果不成功,返回NULL。
41)int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x)
获取扩展项的个数,此函数调用堆栈操作sk_X509_EXTENSION_num(x)来获取扩展项的个数。
42)STACK_OF(CONF_VALUE) * X509V3_get_section(X509V3_CTX *ctx, char *section)
获取配置信息,section为配置信息中的“段”信息。比如有配置信息如下:
[CA]
Name1=A
Name2=B
则section应是”CA”,返回的信息为它包含的内容信息。
43)char * X509V3_get_string(X509V3_CTX *ctx, char *name, char *section)
根据段和属性获取值,比如有如下配置信息:
[CA]
Name1=A
Name2=B
调用此函数时name为”Name1”,sectionwei “CA”,则返回值为”A”。
44)int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool)
判断配置信息的布尔值,如果value表示的值为true、TRUE、y、Y、yes、YES,*asn1_bool 的值设为xff,并返回1,如果为false、FALSE、n、N、NO、no, *asn1_bool设置为 0,并返回1。此函数调用不成功时返回0。
45) int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint)
将value中的值转换为ASN1_INTEGER类型,结果存放在**aint中,函数调用成功返回1,否则返回0。
46)STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line)
分析配置信息的一行数据,返回结果。