Note that there are some explanatory texts on larger screens.

plurals
  1. POSSL_CTX_use_PrivateKey_file() failed
    text
    copied!<p>I'm writing a client application on Windows that establishes an SSL connection to a server, and the server requests client certificate for authentication. The server provides me a .pfx file, then I use openssl command line tool to get the certificate and the private key like this: </p> <pre><code>openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem openssl pkcs12 -in filename.pfx -nocerts -out key.pem </code></pre> <p>after that, I try to load the certificate and the private key with functions from openssl as below, but <code>SSL_CTX_use_PrivateKey_file()</code> always failed, the error message is "<code>error:0906D06C:PEM routines:PEM_read_bio:no start line</code>", I can't figure it out why, can anyone give me some enlightenment? Here is the code.</p> <pre><code>#include "openssl/ssl.h" #include "openssl/err.h" #include &lt;stdio.h&gt; #include &lt;string&gt; int InitClientCtx() { OpenSSL_add_ssl_algorithms(); SSL_CTX* m_pClientCtx; m_pClientCtx = SSL_CTX_new(SSLv23_method()); if(!m_pClientCtx) { return -1; } ::SSL_CTX_set_options(m_pClientCtx, SSL_OP_ALL); //for well-known bugs int nRet = 0; std::string sCertFilePath = "C:\\cert.pem"; nRet = SSL_CTX_use_certificate_chain_file(m_pClientCtx, sCertFilePath.c_str()); std::string sKeyPassWord = "123456"; SSL_CTX_set_default_passwd_cb_userdata(m_pClientCtx, (void*)(sKeyPassWord.c_str())); std::string sKeyFilePath = "C:\\key.pem"; // this method returned 0, which means it failed. nRet = SSL_CTX_use_PrivateKey_file(m_pClientCtx, sKeyFilePath.c_str(), SSL_FILETYPE_PEM); SSL_load_error_strings(); unsigned long n = ERR_get_error(); char buf[1024]; printf("%s\n", ERR_error_string(n, buf)); nRet = SSL_CTX_check_private_key(m_pClientCtx); if (nRet &lt;= 0) { return -1; } /*std::string sCACertFilePath; nRet = SSL_CTX_load_verify_locations(m_pClientCtx, sCACertFilePath.c_str(), NULL);*/ return 0; } int main() { InitClientCtx(); return 0; }; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload