誰能告訴我如何使用提取客戶證書和私鑰從.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);
任何documenatation參考也可以工作。
誰能告訴我如何使用提取客戶證書和私鑰從.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);
任何documenatation參考也可以工作。
沒有錯誤檢查:
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_cert
證書和additional_certs
任何其他證書。
從蘋果公司的網站,這裏有描述:
int PKCS12_parse(PKCS12 *p12, char *pass, EVP_PKEY **pkey, X509 **cert,
STACK **ca);
這函數採用PKCS12結構和密碼(ASCII,空終止) 並返回私鑰,相應的證書和任何證書。如果其中任何一個不是必需的,它可以作爲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);
這SSLeay的網站帶有介紹I2D功能也有所幫助:http://www.umich.edu/~x509/ssleay/asn1_convert.html – aspergillusOryzae 2012-07-16 23:49:53
當我使用上面的代碼,它是在崩潰時 d2i_PKCS12_fp(p12_file,&p12_cert); 正在執行。 有人可以告訴我爲什麼發生這種情況嗎? – Bharat 2010-08-24 08:20:11
@bharat:對不起,'p12_cert'也需要初始化爲'NULL'(查看更新後的答案)。 – caf 2010-08-24 12:28:12
@caf:我認爲這是初始化爲NULL線#02 – Bharat 2010-08-25 05:34:43