Indy 9: Zugriffsverletzung bei SSL-Zertifikatsprüfung
Hallo,
ich hab da ein kleines Problem. Eins vorweg: Ich verwende Indy 9 da der Protierungsaufwand bei einigen großen Projekten nicht machbar ist derzeit. Leider siehts mit der Parallelinstallation beider Indys auch nicht so rosig aus, darum bleibt es vorerst bei der 9er Version. Auf der Serverseite habe ich einen Apache laufen, mod_ssl usw. ist alles schick konfiguriert und ein VHost eingerichtet, welcher nur auf Port 443 lauscht und nur SSL-Verbindungen annimmt. Zweitens habe ich auf dem Server mit dem aktuellen OpenSSL ein Zertifikat für die Subdomain/VHost erzeugt. Rufe ich die Subdomain im Browser auf, läuft das normale Procedere, d.h. Browser beklagt sich über den unbekannten Zertifikatsaussteller, danach steht die SSL-Verbindung. Browser-SSL-Info sagt "TLS v1.0 256 bit AES (1024 bit DHE_RSA/SHA)" wird verwendet. Soweit so gut. Jetzt habe ich mit Delphi (7 Pro) ein kleines Testprojekt erstellt. Einen IdHTTP und einen IdSSLIOHandlerSocket aufs Formular, IdHTTP1.IOHandler auf IdSSLIOHandlerSocket1 eingestellt und IdSSLIOHandlerSocket1.OnVerifyPeer zugewiesen. Die SSL-DLLs habe ich von http://indy.fulgan.com/SSL/ runtergeladen und ins Projekt-EXE-Verzeichnis gelegt. Die folgende Routine ruft dann das Test-Dokument vom Server ab:
Delphi-Quellcode:
Klappt soweit auch, HTML-Seite wird abgerufen und im Memo angezeigt. Jetzt kommt der Schlamassel: Setze ich IdSSLIOHandlerSocket1.SSLOptions.VerifyMode:= [sslvrfPeer] (oder irgendeine andere Kombination anstatt IdSSLIOHandlerSocket1.SSLOptions.VerifyMode:= []), dann knallt es jedesmal mit einer Access Violation. Setze ich IdSSLIOHandlerSocket1.SSLOptions.Method:= sslvTLSv1, dann kommt zusätzlich noch eine EIdOSSLConnectionError Exception. OnVerify wird nicht ausgelöst. Testweise habe ich OnVerify so gestaltet:
procedure TForm1.Button1Click(Sender: TObject);
begin IdSSLOpenSSLHeaders.Load; with HTTPs do begin Host:= 'subdomain.intranet.local'; Port:= 443; if Connected then Disconnect; Connect; Memo1.Lines.Add(Get('https://subdomain.intranet.local/index.html')); Disconnect; end; end;
Delphi-Quellcode:
Wenn OnVerify nicht funktioniert, dann kann ich den nächsten Schritt nicht gehen, das Zertifikat zu prüfen. Damit wäre der ganze SSL-Aufwand nutzlos, ich könnte genauso gut ungesicherte Verbindungen nutzen.
function TForm1.SSLVerifyPeer(Certificate: TIdX509): Boolean;
begin with Certificate do begin Memo1.Lines.Add(FingerprintAsString); end; end; Sind es mal wieder inkompatible SSL-DLLs? Zumindest die Verbindung und der Abruf als solches funktionieren ja, nur das Prüfen des Zertifikates nicht :-( Grüße Cody EDIT: Ich bin schon mal einen Schritt weiter: Wenn ich in der o.g. ButtonClick-Routine unmittelbar nach dem ersten Connect ein Memo1.Lines.Add(SSL.SSLSocket.PeerCert.Fingerprint AsString) ausführe, dann bekomme ich die Daten des Serverzertifikates. Scheinbar knallt es nur bei den Eventhandlern. Bug in Indy 9 oder BimB (Bug in my Brain)??? ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz