Openssl解析私pfx/p12证书(1)

   PKCS#12标准描述了个人标识信息的语法,一种交换数字证书的加密标准,包括用户公钥、私钥、证书等。Openssl提供了API供我们解析pfx/p12文件,提取我们需要的信息。

   首先我们需要了解几个数据结构,由于Openssl文档里面有些介绍的不是很详细,在这里列举一下:

   1、X509 struct

typedef struct x509_st X509;
struct x509_st
{
X509_CINF *cert_info;//证书主体信息
X509_ALGOR *sig_alg;//签名算法信息
ASN1_BIT_STRING *signature;//CA对证书的签名值
int valid;//是否是合法证书,1为合法,0为未知
int references;//引用次数,被引用一次则加一
char *name;//证书持有者信息,内容形式为/C=CN/O=ourinfo,该内容在调用d2i_X509的过程中,通过回调函数x509_cb(crypto/asn1/x_x509.c)调用X509_NAME_oneline来设置
CRYPTO_EX_DATA ex_data;//扩展数据结构,用于存放用户自定义的信息
/* These contain copies of various extension values */
long ex_pathlen;//证书路径长度,对应扩展项为NID_basic_constraints
long ex_pcpathlen;
unsigned long ex_flags;//通过“与”计算存放各种标记
unsigned long ex_kusage;//密钥用法,对应扩展项为NID_key_usage
unsigned long ex_xkusage;//扩展密钥用法,对应扩展项为NID_ext_key_usage
unsigned long ex_nscert;//Netscape证书类型,对应扩展项为NID_netscape_cert_type
ASN1_OCTET_STRING *skid;//主体密钥标识,对应扩展项为NID_subject_key_identifier
struct AUTHORITY_KEYID_st *akid;//颁发者密钥标识,对应扩展项为NID_authority_key_identifier
X509_POLICY_CACHE *policy_cache;//各种策略缓存,对应的策略为NID_policy_constraints、NID_certificate_policies、NID_policy_mappings和NID_inhibit_any_policy
#ifndef OPENSSL_NO_RFC3779
STACK_OF(IPAddressFamily) *rfc3779_addr;
struct ASIdentifiers_st *rfc3779_asid;
#endif
#ifndef OPENSSL_NO_SHA
unsigned char sha1_hash[SHA_DIGEST_LENGTH];//存放证书的sha1摘要值
#endif
X509_CERT_AUX *aux;//辅助信息
} /* X509 */;

 2、X509_CINF struct

typedef struct x509_cinf_st
{
ASN1_INTEGER *version;/* 证书版本,0代表V1,1代表V2 */
ASN1_INTEGER *serialNumber;//证书序列号
X509_ALGOR *signature;//签名算法
X509_NAME *issuer;//颁发者信息
X509_VAL *validity;//有效期
X509_NAME *subject;//拥有者信息
X509_PUBKEY *key;//拥有者的公钥
ASN1_BIT_STRING *issuerUID;/* [ 1 ] optional in v2 */
ASN1_BIT_STRING *subjectUID;/* [ 2 ] optional in v2 */
STACK_OF(X509_EXTENSION) *extensions;/* [ 3 ] optional in v3 */
} X509_CINF;

   3、EVP_PKEY struct

   

typedef struct evp_pkey_st EVP_PKEY;
typedef struct evp_pkey_st
{
     int type;
     int save_type;
     int references;
     union
     {
     char *ptr;//存放密钥结构地址
     #ifndef OPENSSL_NO_RSA
     struct rsa_st *rsa; /* RSA */
     #endif
     #ifndef OPENSSL_NO_DSA
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值