1) int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr)
添加一个属性到req的属性堆栈中。
1) int X509_REQ_add1_attr_by_NID(X509_REQ *req,int nid,
int type,const unsigned char *bytes, int len)
添加一个属性到req的属性堆栈中,nid指明了属性类型,bytes为属性值,len为其长度,type为属性值的ASN1类型。
3) X509_REQ_add1_attr_by_OBJ
同上,属性类型由ASN1_OBJECT指定。
4) X509_REQ_add1_attr_by_txt
同上,属性类型由属性名指定。
4) int X509_REQ_add_extensions_nid(
X509_REQ *req, STACK_OF(X509_EXTENSION) *exts,int nid)
添加一个属性到req的属性堆栈中,将exts扩展项集合作为一个属性加入,nid指明了加入的是哪种属性;该函数将X509_EXTENSION堆栈DER编码,编码后的值作为属性值。
6) X509_REQ_add_extensions
调用了5),只是nid指定为NID_ext_req。
7) X509_REQ_delete_attr
从属性堆栈中删除指定位置的属性。
8) X509_REQ_digest
根据指定的摘要算法,对X509_REQ结构做摘要计算。
9) X509_REQ_dup
拷贝函数,返回一个X509_REQ,返回的X509_REQ需要调用X509_REQ_free释放空间。
10)int X509_REQ_extension_nid(int req_nid)
判断req_nid是否为NID_ext_req、NID_ms_ext_req或其他由用户设置的NID,如果是返回1,否则返回0。
11)STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req)
获取X509_REQ中的属性信息,并将属性信息转换为X509_EXTENSION堆栈。该函数从X509_REQ的属性堆栈中查找包含合法的nid类型的属性(见X509_REQ_get_extension_nids函数说明),如果找到一个,则将属性值通过DER解码转换为扩展项堆栈。
12)X509_REQ_get1_email
获取证书申请中申请者的邮件地址信息,信息来自X509_NAME *subject和STACK_OF(X509_ATTRIBUTE) *attributes,返回一个堆栈。
13)X509_REQ_get_attr
根据指定位置,获取属性堆栈中的一个属性。
14)int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos)
根据属性nid,从req的属性堆栈中查找对应属性,并返回。查找堆栈时,从lastpos位置开始查找。
15)X509_REQ_get_attr_by_OBJ
同上,根据ASN1_OBJECT来查找属性。
16)X509_REQ_get_attr_count
属性堆栈中属性的个数。
17)X509_REQ_get_extension_nids/ X509_REQ_set_extension_nids
获取证书申请合法扩展项列表,默认情况下,该列表在x509/x509_req.c中定义如下:
static int ext_nid_list[] = { NID_ext_req, NID_ms_ext_req, NID_undef};
static int *ext_nids = ext_nid_list;
本函数返回ext_nids;
通过X509_REQ_set_extension_nids函数,用户可用定义自己的证书申请扩展项列,表,该函数的输入参数是一个nid列表。调用X509_REQ_set_extension_nids时,将ext_nids修改为用户输入参数,不再是默认的ext_nid_list。
18)X509_REQ_get_pubkey
获取公钥。
19)X509_REQ_print
将证书申请信息输出到BIO中。
20)int X509_REQ_print_ex(BIO *bp, X509_REQ *x,
unsigned long nmflags, unsigned long cflag)
将证书申请信息输出到BIO中,输出的内容通过cflag进行过滤,其值定义在x509.h中,如下:
#define X509_FLAG_NO_HEADER
#define X509_FLAG_NO_VERSION (
#define X509_FLAG_NO_SERIAL (
#define X509_FLAG_NO_SIGNAME (
#define X509_FLAG_NO_ISSUER (
#define X509_FLAG_NO_VALIDITY (
#define X509_FLAG_NO_SUBJECT (
#define X509_FLAG_NO_PUBKEY (
#define X509_FLAG_NO_EXTENSIONS (
#define X509_FLAG_NO_SIGDUMP (
#define X509_FLAG_NO_AUX (
#define X509_FLAG_NO_ATTRIBUTES (
21)X509_REQ_print_fp
将证书申请消息输出到FILE中。
22)X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md)
根据证书信息,申请者私钥以及摘要算法生成证书请求。x为数字证书,pkey为申请人的私钥信息,md为摘要算法,pkey和md用于给证书申请签名。
23)X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey)
根据X509_REQ生成一个数字证书并返回,days指明其失效期,pkey为外送私钥,用于签名,返回数字证书。此函数无多大用处,由于没有指明颁发者,生成的数字证书颁发者就是X509_REQ中的申请人,并且证书的摘要固定用的是md5算法,另外,没有处理证书扩展项。
24)int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey)
设置证书请求的公钥。
25)int X509_REQ_set_subject_name(X509_REQ *x, X509_NAME *name)
设置证书请求的者的名称,此函数调用X509_NAME_set函数来实现。
26)int X509_REQ_set_version(X509_REQ *x, long version)
设置证书请求信息的版本,此函数调用ASN1_INTEGER_set函数来完成。