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.htmlNun 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.