Извлечение сертификата и закрытого ключа клиента из файла .p12 - PullRequest
4 голосов
/ 23 августа 2010

Может кто-нибудь сказать мне, как использовать

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

любая ссылка на документацию также будет работать.

Ответы [ 2 ]

6 голосов
/ 24 августа 2010

Без проверки ошибок:

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.

2 голосов
/ 17 июля 2012

С сайта Apple, вот описания:

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

Эта функция принимает структуру PKCS12 и пароль (ASCII, завершено нулем) и возвращает приватныйключ, соответствующий сертификат и любые сертификаты 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);
...