FTPS Einstellungen
Hallo,
ich versuche mit dem folgenden Code eine Verbindung per FTPS Indy 10 Delphi 10.4 zu einem Onlinespeicher(HiDrive) bei ionos (1und1) herzustellen: IdFTP1.Passive := true; IdFTP1.AUTHCmd := tAuto; IdFTP1.Host := 'ftp.hidrive.ionos.com'; IdFTP1.Username := '****'; IdFTP1.Password := '****'; IdFTP1.UseTLS := utUseExplicitTLS; IdFTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1; IdFTP1.UseTLS := utUseExplicitTLS; IdSSLIOHandlerSocketOpenSSL1.Host := 'ftp.hidrive.ionos.com'; IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvSSLv23; IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmClient; IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := [sslvrfPeer]; // z.B. IdSSLIOHandlerSocketOpenSSL1.Port := 21; IdSSLIOHandlerSocketOpenSSL1.PassThrough := False; // FTP Server connect try IdFTP1.Connect; except Memo1.Lines.Add('Fehler: Server nicht gefunden'); IdFTP1.Disconnect; Abort; end; //Login wenn erfolgreich angemeldet Memo1.Lines.Add('verbunden'); try IdFTP1.Login; except Memo1.Lines.Add('Fehler: Login Fehler'); IdFTP1.Disconnect; Abort; end; Memo1.Lines.Add('erfolgreich angemeldet'); Die Verbindung wird hergestellt der Login aber abgelehnt. Zugangsdaten schon 100 überprüft woran könnte es noch liegen? Was habe ich vergessen? |
AW: FTPS Einstellungen
Hallo,
UseImpliciteTLS vielleicht? Werden vielleicht Zertifikate benötigt? |
AW: FTPS Einstellungen
So habe ich es:
Zitat:
|
AW: FTPS Einstellungen
Zitat:
|
AW: FTPS Einstellungen
Danke erstmal
Ich bin schon mal weiter ihm/mir fehlt wohl ein Zertifikat Fehler: routine:ss3_get_server_certificate:cetificate verifiy failed Wo bekomme ich ein Zertifikat und wie binde ich das dann ein ? |
AW: FTPS Einstellungen
Riecht die Fehlermeldung nicht danach, dass der Server kein zertifikat geliefert hat?
|
AW: FTPS Einstellungen
Wenn ich das richtig sehe, unterstützt HiDrive nur FTP und SFTP; aber nicht FTPS. Und SFTP geht nicht mit den Indys.
|
AW: FTPS Einstellungen
Zum testen könnt Ihr diesen kleinen FTP server lokal ausprobieren, ich habe es mit Indy nicht geschafft, der Handshake schlägt fehl.
Rebex Tiny SFTP Server (free) |
AW: FTPS Einstellungen
Zitat:
Bis bald... Thomas |
AW: FTPS Einstellungen
FTPS löse ich über das Programm psftp.exe. Ist von Putty.
Habe mir einen Wrapper dafür geschrieben. |
AW: FTPS Einstellungen
Zitat:
Delphi-Quellcode:
sagt du dem IO Handler, dass du das Zertifikat des Peers (da du Client bist also das Server Zertifikat) prüfen lassen willst. Da OpenSSL aber nicht den Windows Zertifikats Store nutzt, ist der OpenSSL Zertifikats Store leer und kennt keine vertrauenswürdigen Zertifikate. Dadurch schlägt die Überprüfung des Server Zertifikat fehl. Das sagt ja auch die Fehlermeldung "certificate verifiy failed".
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := [sslvrfPeer]
Du hast nun mehrere Möglichkeiten: a) Einfach die Zertifikats Überprüfung abschalten
Delphi-Quellcode:
. Damit bist du natürlich für MitM Angriffe anfällig. Wäre aber absolut valide, wenn du die Sicherheit auf andere Ebenen verlagerst.
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := []
b) Du lädst das Server Zertifikat oder das CA Zertifikat vom Server herunter und gibst die Datei in deinem Programm mittels
Delphi-Quellcode:
an. Sollte mal ein Zertifikat von einer anderen CA eingesetzt werden, schlägt die Verbindung aber, wie jetzt auch, fehl.
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile := 'C:\Path\to\CA.crt'
c) Du enumerierst, zur Laufzeit, den Windows Zertifikat Store, konverst die gefundenen Zerts ins OpenSSL Format und trägst diese in den OpenSSL Zertifikats Store ein. So kann OpenSSL auch ganz normal die Überprüfung durchführen und du bist auf einer relativ sicheren Seite. d) Du machst die Zertifikats Überprüfung selber. Bitte beachte dabei nur, dass einige die Meinung vertreten, dass dies der "most dangerous code in the world" ist. Unabhängig von deiner Lösung für die Zertifikats Validierung empfehle ich dir noch
Delphi-Quellcode:
zu setzen, damit du auch TLS 1.1 und TLS 1.2 akzeptierst. Wenn du die BSI Richtlinien umsetzen willst, dann solltest du sogar nur TLS 1.2 akzeptieren
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions = [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]
Delphi-Quellcode:
. Den Wert von
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions = [sslvTLSv1_2]
Delphi-Quellcode:
ignorier dabei, der wird durch den Setter von
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method
Delphi-Quellcode:
verändert und ist eh eine veraltete Property aus Indy 9.
SSLVersions
Dazu solltest du besser die Eigenschaften
Delphi-Quellcode:
,
IdSSLIOHandlerSocketOpenSSL1.Host
Delphi-Quellcode:
und
IdSSLIOHandlerSocketOpenSSL1.Port
Delphi-Quellcode:
nicht selber setzen, das setzt die FTP Komponente schon für dich. Gerade das
IdSSLIOHandlerSocketOpenSSL1.PassThrough
Delphi-Quellcode:
kann sogar hinderlich sein!
PassThrough
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 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