Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   FTPS Einstellungen (https://www.delphipraxis.net/212284-ftps-einstellungen.html)

tkhandel 19. Jan 2023 12:25

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?

hoika 19. Jan 2023 12:39

AW: FTPS Einstellungen
 
Hallo,

UseImpliciteTLS vielleicht?
Werden vielleicht Zertifikate benötigt?

AuronTLG 19. Jan 2023 12:53

AW: FTPS Einstellungen
 
So habe ich es:

Zitat:

IDFTP := TidFTP.Create(XYZ);
IDFTP.IOHandler := SSLHandler;
IDFTP.UseTLS := utUseExplicitTLS;
IDFTP.DataportProtection := ftpdpsPrivate;
IDFTP.Passive := True;
IDFTP.TransferType := ftBinary;
IDFTP.AUTHCmd := tAuto;
SSLHandler.PassThrough := False;
Du kannst auch mal probieren, dem SSLIOHandler das Ereignis "OnVerfiyPeer" zu implementieren und darin einfach nur das Result := True zu setzen.

shebang 19. Jan 2023 13:09

AW: FTPS Einstellungen
 
Zitat:

Zitat von tkhandel (Beitrag 1517604)
Die Verbindung wird hergestellt der Login aber abgelehnt.

Mit welcher Begründung wird der Login denn abgelehnt?

tkhandel 19. Jan 2023 16:07

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 ?

TurboMagic 20. Jan 2023 16:33

AW: FTPS Einstellungen
 
Riecht die Fehlermeldung nicht danach, dass der Server kein zertifikat geliefert hat?

Papaschlumpf73 6. Jul 2023 11:46

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.

KodeZwerg 6. Jul 2023 14:12

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)

mytbo 6. Jul 2023 14:13

AW: FTPS Einstellungen
 
Zitat:

Zitat von Papaschlumpf73 (Beitrag 1524252)
Wenn ich das richtig sehe, unterstützt HiDrive nur FTP und SFTP; aber nicht FTPS. Und SFTP geht nicht mit den Indys.

Die Allzweckwaffe ist Curl (Open-Source). Mehr Informationen findest man in diesem Post. Ein Beispiel mit Quelltext für eine Funktion FTPDownloadFile hier. Je nachdem, wie kritisch die Infrastruktur ist, sollte man sich den Einsatz einer spärlich supporteten Bibliothek wie Indy gut überlegen. Für Curl werden wichtige Sicherheitshinweise z.B. vom BSI (Bundesamt für Sicherheit in der Informationstechnik) veröffentlicht.

Bis bald...
Thomas

stalkingwolf 7. Jul 2023 08:01

AW: FTPS Einstellungen
 
FTPS löse ich über das Programm psftp.exe. Ist von Putty.
Habe mir einen Wrapper dafür geschrieben.

mezen 10. Jul 2023 06:58

AW: FTPS Einstellungen
 
Zitat:

Zitat von tkhandel (Beitrag 1517625)
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 ?

Mit
Delphi-Quellcode:
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := [sslvrfPeer]
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".

Du hast nun mehrere Möglichkeiten:

a)
Einfach die Zertifikats Überprüfung abschalten
Delphi-Quellcode:
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := []
. Damit bist du natürlich für MitM Angriffe anfällig. Wäre aber absolut valide, wenn du die Sicherheit auf andere Ebenen verlagerst.

b)
Du lädst das Server Zertifikat oder das CA Zertifikat vom Server herunter und gibst die Datei in deinem Programm mittels
Delphi-Quellcode:
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile := 'C:\Path\to\CA.crt'
an. Sollte mal ein Zertifikat von einer anderen CA eingesetzt werden, schlägt die Verbindung aber, wie jetzt auch, fehl.

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:
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions = [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]
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
Delphi-Quellcode:
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions = [sslvTLSv1_2]
. Den Wert von
Delphi-Quellcode:
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method
ignorier dabei, der wird durch den Setter von
Delphi-Quellcode:
SSLVersions
verändert und ist eh eine veraltete Property aus Indy 9.

Dazu solltest du besser die Eigenschaften
Delphi-Quellcode:
IdSSLIOHandlerSocketOpenSSL1.Host
,
Delphi-Quellcode:
IdSSLIOHandlerSocketOpenSSL1.Port
und
Delphi-Quellcode:
IdSSLIOHandlerSocketOpenSSL1.PassThrough
nicht selber setzen, das setzt die FTP Komponente schon für dich. Gerade das
Delphi-Quellcode:
PassThrough
kann sogar hinderlich sein!


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