根据PKCS#10,openssl的X509数字证书申请结构定义在crypto/x509.h中,如下所示,主要由两部分组成:
1)X509_REQ_INFO
typedef struct X509_req_info_st
{
ASN1_ENCODING enc;
ASN1_INTEGER *version;
X509_NAME *subject;
X509_PUBKEY *pubkey;
STACK_OF(X509_ATTRIBUTE) *attributes;
} X509_REQ_INFO;
该结构为证书申请信息主体,其中version表示版本,subject为申请者信息,pubkey为申请者公钥信息,attributes为可选的属性信息。该结构的DER编码接口在crytpo/asn1/x_req.c中由宏实现,实现了new、free、i2d和d2i函数。
2)X509_REQ
typedef struct X509_req_st
{
X509_REQ_INFO *req_info;
X509_ALGOR *sig_alg;
ASN1_BIT_STRING *signature;
int references;
} X509_REQ;
该结构为证书申请信息,req_info为信息主体,sig_alg为签名算法,signature为签名值(申请者对req_info的DER编码值用自己的私钥签名)。该结构的DER编码接口在crytpo/asn1/x_req.c中由宏实现,实现了new、free、i2d和d2i函数。