P12 verwenden für SSL Verbindung



  • Hi,

    ich bekomme von einem anderen System einen P12 Container als Base64-codierter Bytestream übermittelt.

    Ich speichere den in einem std::string und decodiere den Base64-String. Da ich nirgends eine Library dafür gefunden habe, habe ich den Code von dieser Seite genutzt:
    http://www.adp-gmbh.ch/cpp/common/base64.html

    Nun frage ich jedoch, wie ich daraus das Zertifikat extrahieren kann, um es einer HTTPS-Connection mitgeben zu können, sprich ich will mich darüber mit dem Server authentifizieren.

    Jetzt dachte ich, das ich einfach den Stream der CertCreateCertificateContext-Funktion übergeben kann.
    Das resultierende PCCERT_CONTEXT würde ich dann der InternetSetOption-Funktion mit dem Parameter INTERNET_OPTION_CLIENT_CERT_CONTEXT übergeben.

    Nun kompiliert dies auch ganz fein, jedoch bekomme ich immer folgenden Error:

    ERROR_INTERNET_SECURITY_CHANNEL_ERROR (12157)

    Lese ich das Zertifikat falsch ein? Oder ist das ein ganz anderes Problem?
    Hat jemand eine Idee?



  • Kann die CertCreateCertificateContext-Funktion überhaupt P12 Container importieren?
    Bei mir schlägt es nun fehl mit dem ErrorCode '-2146881269'.

    Hier mal ein Beispiel, wie ich die Funktion nutze:

    // certificate keystore bytes
    	std::string certbytesBase64("MIACAQM....AAAAA==");
    	std::string certBytes = helperutils::base64_decode(certbytesBase64);
    	//char* certbytes = (char*)certBytesStr.c_str();
    	PCCERT_CONTEXT  pCertContext = NULL; 
    	if(pCertContext = CertCreateCertificateContext(
    						PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
    						(const BYTE*)certBytes.c_str(),
    						(DWORD)certBytes.size()))
    	{
    		LOG( Logging::nDebug, L"P12 imported!!");
    	}
    	else
    	{
    		LOG( Logging::nDebug, L"P12 import FAILED: '%d'", GetLastError());
    	}
    

    Ich habe bis jetzt immer die BouncyCastle-Library benutzt, die in der Hinsicht ein wenig komfortabler ist.


Anmelden zum Antworten