Извлечение клиентского сертификата и закрытый ключ от файла .p12
-
30-09-2019 - |
Вопрос
Кто-нибудь может сказать мне, как использовать
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);
Любое ссылка на документацию также будет работать.
Решение
Без проверки ошибок:
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
.
Другие советы
- Вот страница OpenSSL для анализа: Pkcs12_parse.html.
- Вот ссылка Apple для использования openssl libs: Смотрите PKCS # 12, раздел 2: ввод / вывод
С сайта Apple, вот описания:
int PKCS12_parse(PKCS12 *p12, char *pass, EVP_PKEY **pkey, X509 **cert,
STACK **ca);
Эта функция принимает структуру PKCS12 и пароль (ASCII, NULL заканчивается) и возвращает закрытый ключ, соответствующий сертификат и любые сертификаты CA. Если кто-то из них не требуется, его можно пропустить как нуль. Параметр «CA» должен быть либо NULL, указателем на нулевую или допустимую структуру стека. Как правило, читать в файле PKCS # 12, который вы можете сделать:
p12 = d2i_PKCS12_fp(fp, NULL);
PKCS12_parse(p12, password, &pkey, &cert, NULL); /* CAs not wanted */
PKCS12_free(p12);
Не связан с StackOverflow