Как загрузить файл PKCS # 12 в OpenSSL программно?

В приложении SSL-сервера на базе OpenSSL, как мы можем программно загрузить файл PKCS # 12?

Кроме того, могу ли я загрузить файл PKCS # 12 с сертификатами, ключами и центрами сертификации в том же файле в OpenSSL?

Да, вы можете загрузить файл PKCS # 12, содержащий сертификат, ключ и ЦС в том же файле с OpenSSL.

  • Используйте d2i_PKCS12_fp() или d2i_PKCS12_bio() для загрузки файла PKCS # 12.
  • При необходимости используйте PKCS12_verify_mac() для проверки пароля.
  • Используйте PKCS12_parse() который расшифровывает и извлекает ключ, сертификат и цепочку CA для вас.

От openssl-1.0.0d / demos / pkcs12 / pkread.c :

 #include  #include  #include  #include  #include  /* Simple PKCS#12 file reader */ int main(int argc, char **argv) { FILE *fp; EVP_PKEY *pkey; X509 *cert; STACK_OF(X509) *ca = NULL; PKCS12 *p12; int i; if (argc != 4) { fprintf(stderr, "Usage: pkread p12file password opfile\n"); exit (1); } OpenSSL_add_all_algorithms(); ERR_load_crypto_strings(); if (!(fp = fopen(argv[1], "rb"))) { fprintf(stderr, "Error opening file %s\n", argv[1]); exit(1); } p12 = d2i_PKCS12_fp(fp, NULL); fclose (fp); if (!p12) { fprintf(stderr, "Error reading PKCS#12 file\n"); ERR_print_errors_fp(stderr); exit (1); } if (!PKCS12_parse(p12, argv[2], &pkey, &cert, &ca)) { fprintf(stderr, "Error parsing PKCS#12 file\n"); ERR_print_errors_fp(stderr); exit (1); } PKCS12_free(p12); if (!(fp = fopen(argv[3], "w"))) { fprintf(stderr, "Error opening file %s\n", argv[1]); exit(1); } if (pkey) { fprintf(fp, "***Private Key***\n"); PEM_write_PrivateKey(fp, pkey, NULL, NULL, 0, NULL, NULL); } if (cert) { fprintf(fp, "***User Certificate***\n"); PEM_write_X509_AUX(fp, cert); } if (ca && sk_X509_num(ca)) { fprintf(fp, "***Other Certificates***\n"); for (i = 0; i < sk_X509_num(ca); i++) PEM_write_X509_AUX(fp, sk_X509_value(ca, i)); } sk_X509_pop_free(ca, X509_free); X509_free(cert); EVP_PKEY_free(pkey); fclose(fp); return 0; } 

Попробуйте man SSL , который дает вам список функций OpenSSL. Что-то вроде SSL_load_client_CA_file может удовлетворить ваши потребности; это зависит от того, находится ли сертификат в файле на диске или уже в памяти. Есть много вспомогательных функций, один из них сделает трюк. Также проверьте man PEM для процедур обработки PEM.

Edit: Hm, возможно, комбинация d2i_PKCS12_fp и PKCS12_parse (оба доступны из ) позволяет вам читать сертификат из файла и анализировать его.

Будьте предупреждены, что код записывает сертификаты в виде доверенных сертификатов (зашифрованных). Если вы хотите получить незашифрованные сертификаты, измените вызовы на PEM_write_X509_AUX () на PEM_write_X509 ().

  • Facebook JavaScript SDK через HTTPS, загрузка незащищенных элементов
  • Подтверждения IPN PayPal IPN с использованием процедур SSL: SSL3_READ_BYTES: сбой вызова подтверждения sslv3
  • Обновление для Mac OS X Lion 10.7.2 прерывает SSL
  • Как восстановить отсутствующий сертификат IIS Express SSL?
  • Как настроить SSL для ковша Amazon S3
  • Подключитесь к Postgres через SSL, используя R
  • Как разрешены имена серверов сертификатов SSL / Можно ли добавлять альтернативные имена с помощью keytool?
  • Выбор SSL-сертификата клиента в Java
  • Java SSL: как отключить проверку имени хоста
  • HTTPS с NSURLConnection - NSURLErrorServerCertificateUntrusted
  • SSLHandshakeException Цепочный якорь для пути сертификации не найден Android HTTPS
  • Interesting Posts

    В C, почему я не могу назначить строку массиву символов после ее объявления?

    Как настроить Mac для маршрутизации внешних IP-запросов на разные интерфейсы?

    Получите доступ к интернету на компьютере под управлением Windows 7 без карт PCI

    Как я могу нарисовать изображение программно на iPhone?

    : непризнанный селектор, отправленный в экземпляр

    Когда это действительно для доступа к указателю на «мертвый» объект?

    USB-накопитель распознается в Linux, а не в окнах, mkfs, в каком типе?

    Отменить действие передачи ASCII ftp

    Проверьте, существует ли папка в каталоге и создайте ее с помощью C #

    Как предотвратить появление экрана «Экран / блокировка приветствия» после простоя в Windows 8?

    Ошибка сегментации в glGenVertexArrays (1, & vao);

    Роль смещения в нейронных сетях

    Выдача системных команд в Linux с C, C ++

    Анализ HTML для получения контента с использованием C #

    Как отображать изображение из URL на Android

    Давайте будем гением компьютера.