2010-08-23 8 views
4

Quelqu'un peut-il me dire comment utilisercertificat client Extraction et clé privée de .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); 

toute référence documenatation travaillera également.

Répondre

5

Sans vérification d'erreur:

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

La clé privée est maintenant pkey, le certificat en x509_cert et des certificats supplémentaires additional_certs.

+0

Quand je suis en utilisant le code ci-dessus, il se bloque lorsque d2i_PKCS12_fp (p12_file, & p12_cert); est en cours d'exécution. Quelqu'un peut-il me dire pourquoi cela se passe? – Bharat

+0

@bharat: Désolé, 'p12_cert' doit également être initialisé à' NULL' (voir la mise à jour de la réponse). – caf

+0

@caf: Je pense qu'il est initialisé à NUll dans la ligne # 02 – Bharat

2

Sur le site d'Apple, voici les descriptions:

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

Cette fonction prend une structure PKCS12 et un mot de passe (ASCII, null terminé) et renvoie la clé privée, le correspondant certificat et tous les certificats CA . Si l'un de ceux-ci n'est pas requis, il peut être passé en NULL. Le paramètre 'ca' doit être NULL, un pointeur vers NULL ou une structure STACK valide. En règle générale à lire dans un fichier PKCS # 12 que vous pourriez faire:

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

Ce site SSLeay pour les fonctions i2d avec des descriptions a également été utile: http://www.umich.edu/~x509/ssleay/asn1_convert.html – aspergillusOryzae

Questions connexes