2010-08-23 4 views

ответ

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

+0

@bharat: Извините, 'p12_cert' также должен быть инициализирован' NULL' (см. Обновленный ответ). – caf

+0

@caf: Я думаю, что он инициализирован NUll в строке # 02 – Bharat

2
  • Вот страница OpenSSL для синтаксического анализа: PKCS12_parse.html
  • Вот ссылка компании Apple с использованием OpenSSL LIBS: see PKCS#12, Section 2: I/O

С сайта 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); 
+0

Этот сайт SSLeay для функций i2d с описаниями также был полезен: http://www.umich.edu/~x509/ssleay/asn1_convert.html – aspergillusOryzae

Смежные вопросы