SSL_CTX_use_PrivateKey_file() a échoué

Je suis en train d'écrire une application client sur Windows qui établit une connexion SSL pour un serveur, et le serveur demande de certificat du client pour l'authentification. Le serveur me donne une .fichier pfx, puis-je utiliser openssl outil de ligne de commande pour obtenir le certificat et la clé privée comme ceci:

openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in filename.pfx -nocerts -out key.pem

après cela, j'essaie de charger le certificat et la clé privée avec des fonctions d'openssl comme ci-dessous, mais SSL_CTX_use_PrivateKey_file() toujours échoué, le message d'erreur est "error:0906D06C:PEM routines:PEM_read_bio:no start line", je ne peux pas comprendre pourquoi, quelqu'un peut-il me donner quelques lumières?
Voici le code.

#include "openssl/ssl.h"
#include "openssl/err.h"
#include <stdio.h>
#include <string>

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 <= 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;
};
InformationsquelleAutor jfly | 2013-09-26