C 提取客户端证书&;来自.p12文件的私钥
有人能告诉我怎么用吗C 提取客户端证书&;来自.p12文件的私钥,c,openssl,ssl-certificate,pkcs#12,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); 任何文档引用也可以使用。无需错误检查: FILE *p12_file; PKCS12 *p12_cert = NULL; EVP_PKEY *pkey; X509 *x509_
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);
私钥现在位于pkey
中,证书位于x509\u-cert
中,任何其他证书位于其他\u-certs
- 以下是openssl的解析页面:
- 以下是苹果使用openssl libs的链接:
int PKCS12_parse(PKCS12 *p12, char *pass, EVP_PKEY **pkey, X509 **cert,
STACK **ca);
此函数采用PKCS12结构和密码(ASCII,以null结尾)
并返回私钥、相应的证书和任何CA
证书。如果其中任何一项不是必需的,则可以将其作为NULL传递。
“ca”参数应为NULL、指向NULL的指针或有效堆栈
结构。通常,要读取PKCS#12文件,您可以执行以下操作:
p12 = d2i_PKCS12_fp(fp, NULL);
PKCS12_parse(p12, password, &pkey, &cert, NULL); /* CAs not wanted */
PKCS12_free(p12);
当我使用上述代码时,当d2i_PKCS12_fp(p12_文件和p12_证书)时,它会崩溃;正在被处决。有人能告诉我为什么会发生这种情况吗?@bharat:对不起,
p12\u cert
也需要初始化为NULL
(请参阅更新的答案)。@caf:我想它是在第行初始化为NULL的#02@bharat:现在是,因为我修复了它-但以前不是,这就是错误所在。@bharat:对我来说很好。。。(如果您愿意,也可以只执行p12\u cert=d2i\u PKCS12\u fp(p12\u文件,NULL);
)。此i2d函数的SSLeay站点及其说明也很有帮助: