C++ 使用.pfx(pkcs12)文件而不是.pem文件建立SSL连接的编程方式

C++ 使用.pfx(pkcs12)文件而不是.pem文件建立SSL连接的编程方式,c++,c,openssl,pfx,pkcs#12,C++,C,Openssl,Pfx,Pkcs#12,到目前为止,我们使用的是.pem文件,我们能够建立SSL连接(仅供参考,代码如下): 但是现在要求已经改变,我们必须使用.pfx文件。在OpenSSL中,我找不到使用相同的选项/函数 在SO和各种论坛中搜索了许多帖子,如: ... 其他的也很少 但是找不到一种方法,无法在使用Linux的C/C++中以编程方式将.pfx转换为.pem。 是否有任何现成的OpenSSL API支持这一点?(例如,对于.pem,我们有一个常量SSL\u FILETYPE\u pem]无法使用标准C99/ANSI

到目前为止,我们使用的是
.pem
文件,我们能够建立SSL连接(仅供参考,代码如下):

但是现在要求已经改变,我们必须使用
.pfx
文件。在OpenSSL中,我找不到使用相同的选项/函数

在SO和各种论坛中搜索了许多帖子,如:



... 其他的也很少

但是找不到一种方法,无法在使用Linux的C/C++中以编程方式将
.pfx
转换为
.pem


是否有任何现成的OpenSSL API支持这一点?(例如,对于.pem,我们有一个常量
SSL\u FILETYPE\u pem
]

无法使用标准C99/ANSI LIB的转换。 您也可以尝试使用system()或popen()调用sys函数,如OpenSSL

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


我在上面的一个链接中找到了。你对此有何看法?(还有)。我认为使用openssl API可以是一种替代方法。无论如何,如果你不想使用静态链接,你可以选择使用动态链接。我是否有所帮助?实际上,这个问题是在移动平台上,用于不时更改.pfx文件。我希望
系统()
命令可以在所有移动和桌面平台上运行。您指的是哪种OpenSSL API,它是函数吗?您只能通过CrossPlataforms使用一次编译?我的意思是,如果您使用编译指令,您可以避免不兼容,例如使用-DANDROID或类似的东西(如果使用gcc)根据您运行的操作系统选择要使用的openssl调用。
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)));
}