2014-11-17 8 views
1

До сих пор мы используем файл .pem, и мы можем установить SSL-соединение (только для справки, под кодом):Программный способ использования файла .pfx (pkcs12) вместо файла .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 и различных форумах, как:
Converting .PFX to .PEM programatically?
Convert a .PEM certificate to .PFX programmatically using OpenSSL
Converting pfx to pem using openssl
... и некоторые другие.

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

ответ

0

Там нет никакого способа, чтобы использовать convertions со стандартным LIBS C99/ANSI. в качестве альтернативы Вы можете попробовать использовать систему() или POPEN() для вызова функции SYS, как OpenSSL.

$ OpenSSL PKCS12 -in cert.pfx отъезда cert.pem

+1

Я считаю [эту программу на основе Windows] (https://github.com/michaelmotes/PKCS12toPEM/blob/master/PKCS12toPEM /PKCS12toPEM.cpp) в одной из приведенных выше ссылок. Каково ваше мнение об этом? (Также [эта ссылка] (http://stackoverflow.com/questions/3549459/extracting-client-cert ificate-частный ключ из-p12-файл)). – iammilind

+0

Я думаю, что использование openssl API может быть альтернативой. В любом случае, если вы не хотите использовать его статически, вы можете по желанию перейти на динамические ссылки. Я полезен? – rfermi

+0

На самом деле эта проблема находится в мобильной платформе для изменения файла .pfx время от времени. Я надеюсь, что команда 'system()' будет работать на всех мобильных и настольных платформах. Какой API OpenSSL вы имеете в виду, является ли это функцией? – iammilind