2010-08-23 74 views
4

誰能告訴我如何使用提取客戶證書和私鑰從.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參考也可以工作。

回答

5

沒有錯誤檢查:

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任何其他證書。

+0

當我使用上面的代碼,它是在崩潰時 d2i_PKCS12_fp(p12_file,&p12_cert); 正在執行。 有人可以告訴我爲什麼發生這種情況嗎? – Bharat 2010-08-24 08:20:11

+0

@bharat:對不起,'p12_cert'也需要初始化爲'NULL'(查看更新後的答案)。 – caf 2010-08-24 12:28:12

+0

@caf:我認爲這是初始化爲NULL線#02 – Bharat 2010-08-25 05:34:43

2

從蘋果公司的網站,這裏有描述:

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

這SSLeay的網站帶有介紹I2D功能也有所幫助:http://www.umich.edu/~x509/ssleay/asn1_convert.html – aspergillusOryzae 2012-07-16 23:49:53

相關問題