![]() |
Public Key aus einem X509 Zertifikat auslesen
Hallo zusammen,
ich bin ja dabei ein wenig an der Lackierung des Klarlacks der Schutzhülle der Oberfläche der Kryptologie zu kratzen... oder so ähnlich. Ich bin dafür auf die ![]()
Delphi-Quellcode:
Hat jemand eine Idee? Wo mache ich den Fehler?
try
CertPath := 'c:\sinnloserPfad\data'; // Beide Formate liegen vor, egal welche Datei ich einlese...immer das gleiche Ergebnis pubCert := TFileStream.Create(CertPath + '\zpr_prod_public_cert.cer', fmOpenRead or fmShareDenyNone); // pubCert := TFileStream.Create(CertPath + '\zpr_prod_public_key.der', fmOpenRead or fmShareDenyNone); try SetLength(Buffer, pubCert.Size); BufLen := pubCert.read(Pointer(Buffer)^, pubCert.Size); // sollte ich eventuell an dieser Stelle noch irgendwas kodieren/dekodieren Base64 oder so? finally pubCert.Free; end; except RaiseLastOSError; Exit; end; if Length(Buffer) > 1 then begin try DataLen := 0; // die folgende Zeile müsste es eigentlich schon tun... Das Ergebnis-Objekt ist aber leer, und der Fehler ist eingangs genannter "ASN1 Ungültig...." CertContext := CertCreateCertificateContext(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, @Buffer[0], BufLen); if CertContext = nil then // Dann eben die andere Variante, die aber zu exakt dem gleichen Fehler führt :( Win32Check(CryptDecodeObjectEx(X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, X509_PUBLIC_KEY_INFO, @Buffer[0], BufLen, CRYPT_ENCODE_ALLOC_FLAG, nil, @PublicKeyInfo, DataLen)) else begin // hier kommen wir gar nicht mehr hin... hCProv := __CryptAcquireContext(PROV_RSA_FULL); if Win32Check(CryptImportPublicKeyInfo(hCProv, X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, @certcontext.pCertInfo.SubjectPublicKeyInfo, hKey)) then begin DataLen := Length(einKey); BufLen := DataLen; Win32Check(CryptEncrypt(hkey, 0, True, 0, @EinKey[0], DataLen, BufLen)); SetLength(einKey, DataLen); end; end; finally Win32Check(CryptReleaseContext(hCProv, 0)); end; end; Sherlock |
AW: Public Key aus einem X509 Zertifikat auslesen
|
AW: Public Key aus einem X509 Zertifikat auslesen
Tja, wincrypt hat zu Recht den Ruf kompliziert zu sein...und zwar absolut unnötigerweise. Es ist schlicht nicht mit vertretbarem Aufwand möglich die simple Aufgabe durchzuführen. Egal, ich verwende jetzt OpenSSL dafür (PubKey auslesen und RSA verschlüsseln). Da ist das ein Klacks... Mir tun alle Leid, die nur auf die MS API bauen dürfen.
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz