从.p12文件中提取客户端证书和私钥

任何人都可以告诉我如何使用

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); 

任何文件参考也将起作用。

没有错误检查:

 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); 

私钥现在位于x509_cert中, x509_cert的证书和x509_cert任何其他证书。

  • 这是openssl的解析页面: PKCS12_parse.html
  • 这是Apple使用openssl库的链接: 参见PKCS#12,第2节:I / O.

从Apple的网站,以下是描述:

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

此函数采用PKCS12结构和密码(ASCII,null终止)并返回私钥,相应的证书和任何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);