Программный способ использования файла.pfx (pkcs12) вместо файла.pem для установления соединения SSL

До сих пор мы используем .pem файл, и мы можем установить соединение SSL (только для справки, ниже код):

ASSERT(true == ::SSL_CTX_use_certificate_file(
         m_Attribute.m_pContext, certificateFileName.c_str(), SSL_FILETYPE_PEM),
       "Unable to use certificate file.");

ASSERT(true == ::SSL_CTX_use_PrivateKey_file(
         m_Attribute.m_pContext, certificateFileName.c_str(), SSL_FILETYPE_PEM),
       "Unable to load private key file.");

::SSL_CTX_set_options(m_Attribute.m_pContext, g_SSLChoice[version].m_Negotiation);

// ... some more relevant code

ASSERT(true == ::SSL_set_tlsext_host_name(m_pSSL, hostName.c_str()),
       "Cannot enable server name indication for " + hostName);

{
  int result = ::SSL_connect(m_pSSL);
  ASSERT(result == 1, "Cannot build an SSL connection, error = " +
      Util::Convert::to_string(::SSL_get_error(m_pSSL, result)));
}

Однако теперь требование изменилось, и мы должны использовать .pfx файл. В OpenSSL я не смог найти опцию / функцию для использования того же самого.

Искал много тем в SO и различных форумах, таких как:
Преобразование.PFX в.PEM программно?
Конвертируйте сертификат.PEM в.PFX программно, используя OpenSSL
Преобразование pfx в pem с использованием openssl
... и несколько других.

Но не смог найти способ конвертировать .pfx в .pem программно в C/C++ с Linux.
Есть ли какой-либо легкодоступный API OpenSSL, который поддерживает это? (например, для.pem у нас есть постоянная SSL_FILETYPE_PEM]

1 ответ

Нет никакого способа использовать преобразования со стандартными библиотеками C99/ANSI. В качестве альтернативы вы можете попробовать использовать system() или popen() для вызова функции sys, например OpenSSL.

$ openssl pkcs12 -in cert.pfx -out cert.pem

Другие вопросы по тегам