提取客户证书&来自.p12文件的私钥

时间:2010-08-23 16:12:30

标签: c openssl ssl-certificate pkcs#12

有人可以告诉我如何使用

PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); 

int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca); 

任何文档参考也可以。

2 个答案:

答案 0 :(得分:6)

没有错误检查:

FILE *p12_file;
PKCS12 *p12_cert = NULL;
EVP_PKEY *pkey;
X509 *x509_cert;
STACK_OF(X509) *additional_certs = NULL;

p12_file = fopen("foo.p12", "rb");
d2i_PKCS12_fp(p12_file, &p12_cert);
fclose(p12_file);

PKCS12_parse(p12_cert, "password", &pkey, &x509_cert, &additional_certs);

私钥现在位于pkeyx509_cert中的证书以及additional_certs中的任何其他证书。

答案 1 :(得分:2)

Apple的网站上有以下描述:

int PKCS12_parse(PKCS12 *p12, char *pass, EVP_PKEY **pkey, X509 **cert,
                             STACK **ca);

此函数采用PKCS12结构和密码(ASCII,空终止)     并返回私钥,相应的证书和任何CA.     证书。如果不需要其中任何一个,则可以将其作为NULL传递。     'ca'参数应该是NULL,指向NULL的指针或有效的STACK     结构体。通常,您可以读取PKCS#12文件:

p12 = d2i_PKCS12_fp(fp, NULL);
PKCS12_parse(p12, password, &pkey, &cert, NULL);    /* CAs not wanted */
PKCS12_free(p12);