Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Overbyte FTPS und Datachannel (https://www.delphipraxis.net/216832-overbyte-ftps-und-datachannel.html)

DelTurbo 10. Mär 2025 15:08

Overbyte FTPS und Datachannel
 
Hi,
ich versuche eine Datei mit Overbyte und FtpClient.PUT hochzuladen. Die Verbindung wird mit TLS aufgebaut. Ich kann auch Direcotrys erstellen. Aber nix hochladen. Es kommt immer 522 SSL/TLS required on the data channel.

Ich habe schon ChatGPT bemüht aber da kommt nur Mist. Und bei google finde ich nicht wie ich den Daten Kanal Protecten kann. Ich hoffe jemand von euch weiß das.

Vielen Dank im voraus

jaenicke 10. Mär 2025 23:13

AW: Overbyte FTPS und Datachannel
 
Hast du PBSZSize auf 0 gesetzt und PbszAsync ausgeführt sowie ProtLevel auf P gesetzt und ProtAsync ausgeführt?

Siehe Kommentar im Quelltext:
Zitat:

How to use FTPS (TLS/SSL/Implicit SSL) ? - V2.106
First you need to have ICS-SSL and recompile the component and your project
having symbol USE_SSL defined. Then specify the SSLType, either use
explicit command AUTH after Open command to request TLS/SSL protection of
the control channel on standard port from server, or you may use one of
the high level commands which will automatically invoke Auth TLS/SSl once
connected to the server. Implicit SSL is another method that establishes
always a secure control channel (no AUTH command is required). To protect
the data channel as well issue "PBSZ 0" and "PROT P" once the control
channel is protected, or "PROT C" to clear the data channel.
Currently there's only one spec available specifying explizit SSL (AUTH TLS)
it's RFC4217.

DelTurbo 11. Mär 2025 09:07

AW: Overbyte FTPS und Datachannel
 
Hi, erstmal danke für die Antwort. Wenn ich ehrlich bin habe ich diesen Text nicht verstanden.

Ich möchte mal meinen Quelltext zeigen. Vielleicht kann dann jemand sagen (oder du) wo das rein muss.

Erzeugen des FTPClient:
Delphi-Quellcode:
function CreateFTPClient(Host,Port,User,Pass:String):Boolean;
begin
    Result:=True;
    try
      FTPClient:=TSslFtpClient.Create(nil);
      FtpClient.HostName :=Host;
      FTPClient.Port:=Port;
      FtpClient.UserName:=User;
      FtpClient.PassWord:=Pass;
      FtpClient.SslType:=sslTypeAuthTls;
      FtpClient.SslContext:=TSslContext.Create(nil);
      FtpClient.SslContext.SslVerifyPeer := False; // Kein Zertifikatscheck
      FTPClient.Passive:=True;
      FTPClient.Connect;
    except
      Result:=False;
    end;
end;
Upload:
Delphi-Quellcode:
function FTPUpload(FName:String):Boolean;
begin
    Result:=True;
    FTPClient.Binary:=True;
    FTPClient.LocalFileName:=FName;
    FTPClient.HostFileName:=FTPFName;
    if ( not FTPClient.Put ) then begin
      WriteLn(FTPClient.LastResponse);
    end;
end;

DelTurbo 12. Mär 2025 09:01

AW: Overbyte FTPS und Datachannel
 
Ich habe das mal eingebaut, so wie ich das meine. Kommt eine Execption ProtAsync.

Hier mal der Quellcodeteil:

Delphi-Quellcode:
      FtpClient.Connect;
      FtpClient.PBSZSize:=0;
      FtpClient.PbszAsync;
      Writeln(FtpClient.LastResponse);
      Sleep(1000);
      FtpClient.ProtLevel:='P';
      FtpClient.ProtAsync;  //<-- Hier kommt 'FTP component not ready, state Waiting Response'
      Writeln(FtpClient.LastResponse);
Was mach ich nun wieder falsch?!?

jaenicke 12. Mär 2025 09:34

AW: Overbyte FTPS und Datachannel
 
Async heißt async. ICS ist eventbasiert. Du musst auf die Antwort reagieren (nicht warten) statt direkt den Wert in LastResponse anzuzeigen und 1 Sekunde fest zu warten, während du den Thread blockierst.

Stattdessen musst du auf OnRequestDone reagieren. Dort bekommst du den ausgeführten Befehl übergeben und kannst bei RqType = ftpPbsz den Prot Befehl ausführen.

DelTurbo 12. Mär 2025 10:53

AW: Overbyte FTPS und Datachannel
 
Hi,
erstmal danke für deine Hilfe. Ich habe das nun wie folgt eingebaut, aber im FTPLog steht immer noch: 2025-03-12 11:41:55,676 mod_tls/2.9.2[4886]: unable to open data connection: TLS negotiation failed

Ich habe das wie folgt eingebunden:
Delphi-Quellcode:
      FtpClient.HostName := 'pc238.lan'; // FTP-Server-Adresse
      FtpClient.UserName := 'ftpusr';       // FTP-Benutzername
      FtpClient.PassWord := '123456';       // FTP-Passwort
      FtpClient.SslType:= sslTypeAuthTls;  
      FtpClient.SslContext:= TSslContext.Create(nil);
      FtpClient.SslContext.SslVerifyPeer := False;       // Kein Zertifikatscheck
      FTPClient.Passive:=True;
      writeln('Verbinde mit FTP-Server...');
      FtpClient.Connect;
      writeln('Verbunden!');

      ReqDone:=False;
      FtpClient.PBSZSize:=0;
      FtpClient.PbszAsync;

      while ( not ReqDone ) do begin
        Application.ProcessMessages;
        Sleep(100);
      end;
Und im FtpClientRequestDone:
Delphi-Quellcode:
    if ( RqType=ftpPbszAsync ) then begin
      FtpClient.ProtLevel:='P';
      FtpClient.ProtAsync;
    end else
    if ( RqType=ftpProtAsync ) then begin
      ReqDone:=True;
    end;
Damit müsste ja sicher gestellt sein das die 2 sachen durch sind. Naja und beim FtpClient.Put kommt immer noch 425 (siehe FTPLog). Ist Falsch was ich gemacht habe? Oder fehlt noch etwas?

Edit: Ich gehe über mitm und kann sehen das die eigenglich Verbindung über TLS läuft. Aber die Daten werden im Klartext gesendet.

DelTurbo 16. Mär 2025 08:52

AW: Overbyte FTPS und Datachannel
 
Hallo,
ich mache es sehr ungern. Aber ich möchte doch nochmal nach fragen ob wirklich keiner eine Idee hat, was ich Falsch mache? Ich bekomme den Datenkanal nicht dicht. Bei Indy weiß ich das man nur ein Flag setzen muss.

Aber weder bei ICS noch Synapse bekomme ich das hin. Es kommt beim versuch eine uploads immer:
Code:
425 Unable to build data connection: Die Operation ist nicht erlaubt
Es wird dann eine 0 Byte Datei auf dem FTP angelegt und das war es. :(

DelTurbo 16. Mär 2025 10:42

AW: Overbyte FTPS und Datachannel
 
Hier noch ein Log mit ICSLogger gemacht.

Code:
11:27:21:556 ! HighLevelAsync 0
11:27:21:601 Control DNS Lookup Done - 192.168.0.238
11:27:21:615 Control Socket Connect, error=0 to 192.168.0.238:ftp
11:27:21:668 >|220 ProFTPD Server (Debian) [192.168.0.238]|

11:27:21:668 ! HighLevelAsync 0
11:27:21:668 Start command, Req=AuthAsync - AUTH TLS
11:27:21:670 >|234 AUTH TLS successful|

11:27:21:702 ! HighLevelAsync 0
11:27:21:702 Start command, Req=UserAsync - USER ftpusr
11:27:21:703 >|331 Password required for ftpusr|

11:27:21:704 ! HighLevelAsync 0
11:27:21:704 Start command, Req=PassAsync - PASS 123456
11:27:21:776 >|230 User ftpusr logged in|

11:27:21:776 ! HighLevelAsync 0
11:27:21:776 ! HighLevelAsync done
11:27:26:432 Start command, Req=PbszAsync - PBSZ 0
11:27:26:577 >|200 PBSZ 0 successful|

11:27:26:579 Start command, Req=ProtAsync - PROT P
11:27:26:701 >|200 Protection set to Private|

11:27:26:702 Start command, Req=TypeSetAsync - TYPE I
11:27:26:860 >|200 Type set to I|

11:27:27:022 ! HighLevelAsync 0
11:27:27:022 Start command, Req=PortAsync - PASV
11:27:27:023 >|227 Entering Passive Mode (192,168,0,238,179,33).|

11:27:27:023 ! HighLevelAsync 0
11:27:27:023 Start command, Req=Put/Append - libssl-1_1.zip
11:27:27:025 ! Data Session opened (Put)
11:27:27:027 >|150 Opening BINARY mode data connection for file.zip|

11:27:27:028 ! Send first block
11:27:27:028 DataSocketPutDataSent 65536
11:27:27:032 ! Data Session closed
11:27:27:032 ! Next3PutAsync
11:27:27:033 >|425 Unable to build data connection: Die Operation ist nicht erlaubt|

11:27:27:034 Start command, Req=QuitAsync - QUIT
11:27:27:036 >|221 Goodbye.|

11:27:27:038 Control Socket Closed, error=0

jaenicke 16. Mär 2025 11:09

AW: Overbyte FTPS und Datachannel
 
Kannst du das Log nicht mal mit Filezilla oder so vergleichen? Das gibt die Befehle ja auch aus.

Ich muss mal schauen, dass ich einen FTPS Server zum Testen aufsetze. Das sollte ja schnell gehen...

DelTurbo 16. Mär 2025 15:02

AW: Overbyte FTPS und Datachannel
 
Hui,
danke erstmal. Ich hab ProFTP unter Debian genommen.
Filezilla muss ich erst besorgen. Werde ich dir morgen bescheid sagen.

Gruß und danke schonmal...:thumb:

PS.: Emails scheinen immer noch nicht zu gehen, sonst hätte ich schneller geantwortet.

jaenicke 16. Mär 2025 15:27

AW: Overbyte FTPS und Datachannel
 
Welches Tool ist ja egal solange es die Befehle anzeigt.

DelTurbo 17. Mär 2025 12:14

AW: Overbyte FTPS und Datachannel
 
Hi,
tut mir leid das ich erst jetzt das log schicke....
Ich hoffe das Hilft weiter.

Code:
13:09:23   Status:   Auflösen der IP-Adresse für pc238.lan
13:09:23   Status:   Verbinde mit 192.168.0.238:21...
13:09:23   Status:   Verbindung hergestellt, warte auf Willkommensnachricht...
13:09:23   Antwort:   220 ProFTPD Server (Debian) [192.168.0.238]
13:09:23   Befehl:   AUTH TLS
13:09:23   Antwort:   234 AUTH TLS successful
13:09:23   Status:   Initialisiere TLS...
13:09:23   Trace:   TLS Handshake successful
13:09:23   Trace:   Protocol: TLS1.2, Key exchange: ECDHE-X25519-RSA-PSS-RSAE-SHA256, Cipher: AES-256-GCM, MAC: AEAD, ALPN: ftp
13:09:23   Trace:   Hostname does not match certificate SANs
13:09:23   Status:   TLS-Verbindung hergestellt.
13:09:23   Befehl:   USER ftpusr
13:09:23   Antwort:   331 Password required for ftpusr
13:09:23   Befehl:   PASS ******
13:09:23   Antwort:   230 User ftpusr logged in
13:09:23   Befehl:   CLNT FileZilla
13:09:23   Antwort:   200 OK
13:09:23   Befehl:   OPTS UTF8 ON
13:09:23   Antwort:   200 UTF8 set to on
13:09:23   Befehl:   PBSZ 0
13:09:23   Antwort:   200 PBSZ 0 successful
13:09:23   Befehl:   PROT P
13:09:23   Antwort:   200 Protection set to Private
13:09:23   Status:   Angemeldet
13:09:23   Trace:   Measured latency of 9 ms
13:09:23   Status:   Starte Upload von C:\tmp\win32openssl-3_4_0.exe
13:09:23   Befehl:   CWD /
13:09:23   Antwort:   250 CWD command successful
13:09:23   Befehl:   TYPE I
13:09:23   Antwort:   200 Type set to I
13:09:23   Befehl:   PASV
13:09:23   Antwort:   227 Entering Passive Mode (192,168,0,238,183,13).
13:09:23   Trace:   Binding data connection source IP to control connection source IP 192.168.0.21
13:09:23   Trace:   Trying to resume existing TLS session.
13:09:23   Befehl:   STOR win32openssl-3_4_0.exe
13:09:23   Antwort:   150 Opening BINARY mode data connection for win32openssl-3_4_0.exe
13:09:23   Trace:   TLS Handshake successful
13:09:23   Trace:   TLS Session resumed
13:09:23   Trace:   Protocol: TLS1.2, Key exchange: ECDHE-X25519, Cipher: AES-256-GCM, MAC: AEAD, ALPN:
13:09:25   Antwort:   226 Transfer complete
13:09:25   Status:   Dateiübertragung erfolgreich, 188.459.949 Bytes in 1 Sekunde übertragen
13:09:25   Status:   Empfange Verzeichnisinhalt für "/"...
13:09:25   Befehl:   PASV
13:09:25   Antwort:   227 Entering Passive Mode (192,168,0,238,173,151).
13:09:25   Trace:   Binding data connection source IP to control connection source IP 192.168.0.21
13:09:25   Trace:   Trying to resume existing TLS session.
13:09:25   Befehl:   MLSD
13:09:25   Antwort:   150 Opening BINARY mode data connection for MLSD
13:09:25   Trace:   TLS Handshake successful
13:09:25   Trace:   TLS Session resumed
13:09:25   Trace:   Protocol: TLS1.2, Key exchange: ECDHE-X25519, Cipher: AES-256-GCM, MAC: AEAD, ALPN:
13:09:25   Antwort:   226 Transfer complete
13:09:25   Status:   Anzeigen des Verzeichnisinhalts für "/" abgeschlossen
13:09:29   Status:   Verbindung zum Server getrennt

jaenicke 17. Mär 2025 15:52

AW: Overbyte FTPS und Datachannel
 
Geht es vielleicht, wenn du SslContext.SslSessionCacheModes auf [sslSESS_CACHE_CLIENT] setzt?

Außerdem könntest du einstellen, dass der Logger mehr Details loggen soll. Man kann da den kompletten Handshake usw. loggen lassen.

DelTurbo 18. Mär 2025 14:00

AW: Overbyte FTPS und Datachannel
 
Liste der Anhänge anzeigen (Anzahl: 1)
:(
Zitat:

Zitat von jaenicke (Beitrag 1547207)
Geht es vielleicht, wenn du SslContext.SslSessionCacheModes auf [sslSESS_CACHE_CLIENT] setzt?

Immer noch 425 :(

Hier erstmal das Log. Ich wollte es nicht Posten weil es doch etwas länger ist.

jaenicke 18. Mär 2025 14:27

AW: Overbyte FTPS und Datachannel
 
Ah, Entschuldigung, das war ein Missverständnis, ich meinte die ICS Logs, um dort Fehlerdetails zu sehen. Dort kann man das Log auch so detailliert bekommen.

DelTurbo 19. Mär 2025 09:00

AW: Overbyte FTPS und Datachannel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kein Grund dich zu Entschuldigen. Ich hätte ja auch nachfragen können. :)

Hier nun das Log von ICS. Da ich nicht weiß wonach du suchst habe ich alle auf True gesetzt. Das ist wesentlich länger deswegen wieder als Anhang.

Ich möchte mich schonmal im Vorfeld für deine Hilfe bedanken.

DelTurbo 20. Mär 2025 20:23

AW: Overbyte FTPS und Datachannel
 
Hi, nach langem suche, ich wusste ja nicht wonach, habe ich es gefunden. Man muss das Commando EPSV schicken, dann bekommt man vom FTPServer einen Port der verschlüsselt ist und wo man die Daten hochladen soll.

Das ist hier relativ gut beschrieben. Trotzdem vielen dank für deine mühe. Nun muss ich nur noch rausfinden wie ich ICS dazu bringe das Commando zu nutzen.

jaenicke 20. Mär 2025 21:18

AW: Overbyte FTPS und Datachannel
 
ICS verwendet für IPv6 wohl auch automatisch EPSV. Du solltest das mit SendCommand manuell schicken können.

Das erklärt aber auch, warum es bei mir keine Probleme gab, als ich es getestet habe. Das braucht man ja nicht immer. Ich wollte noch einen anderen Server versuchen.

DelTurbo 22. Mär 2025 09:26

AW: Overbyte FTPS und Datachannel
 
Zitat:

Zitat von DelTurbo (Beitrag 1547329)
Hi, nach langem suche, ich wusste ja nicht wonach, habe ich es gefunden. Man muss das Commando EPSV schicken, dann bekommt man vom FTPServer einen Port der verschlüsselt ist und wo man die Daten hochladen soll.

Ich habe mir noch mal Logs vom FileZilla und FlashFXP angesehen. Die senden das EPSV Command nicht. Und es geht trotzdem. Nun verstehe ich nix mehr. :cry::cry:

jaenicke 22. Mär 2025 09:42

AW: Overbyte FTPS und Datachannel
 
Ein solcher Unterschied in den gesendeten Befehlen wäre mir auch aufgefallen.

Hast du es einmal mit den Demos von ICS versucht, z.B. OverbyteIcsXferTst?

DelTurbo 22. Mär 2025 15:24

AW: Overbyte FTPS und Datachannel
 
Zitat:

Zitat von jaenicke (Beitrag 1547363)
Ein solcher Unterschied in den gesendeten Befehlen wäre mir auch aufgefallen.

Hast du es einmal mit den Demos von ICS versucht, z.B. OverbyteIcsXferTst?

Ja habe ich. Daher habe ich ja den Befehl EPSV. Wenn man den bei IPV4 sendet kommt nur der "neue" port zurück.
Aber es muss ja ohne gehen. Nur wie?

DelTurbo 24. Mär 2025 09:55

AW: Overbyte FTPS und Datachannel
 
Hat wirklich keiner eine Idee was ich falsch mache? Ein Bug im Proftpd kann es eigentlich ja nicht sein, da sonst die anderen Clients (Filezilla, FlashFXP) auch nicht gehen würden.

Ich bin total ratlos und wäre für jede Hilfe dankbar.

DelTurbo 24. Mär 2025 13:28

AW: Overbyte FTPS und Datachannel
 
Noch ein Nachtrag, vielleicht Hilft es. Unter Debian 10 laufen alle Clients (Synapse,ICS...) einwandfrei. So richtig verstehe ich das alles nicht. Von den Kommandos her machen die alle das gleiche. Genau wie Filezilla, FlashFXP. Die laufen ja auf Debian 10 UND Debian 12.

Debian 10 = ProFTPD Version 1.3.6
Debian 12 = ProFTPD Version 1.3.8

jaenicke 25. Mär 2025 01:55

AW: Overbyte FTPS und Datachannel
 
Bei mir funktioniert es ohne weitere Befehle. Insofern kann ich den Fehler leider schlecht genauer anschauen. Ob das am Server oder deiner Umgebung liegt, weiß ich nicht.
:cry:

DelTurbo 25. Mär 2025 09:32

AW: Overbyte FTPS und Datachannel
 
Ich glaube wir vergessen das und ich bedanke mich recht herzlich für deine Hilfe bei dem komischen verhalten. Ich habe mir gestern die aktuellen Proftpd Source gezogen und erstellt. Damit läuft es wieder.

Version: ProFTPD Version 1.3.10rc1 (gleich konfiguriert wie 1.3.8 und 1.3.6)

Was halt nur so komisch ist, ist das es mit Filezilla/FlshFXP geht. Das hat "uns" wohl so ins stolpern gebracht. Ich weiß leider auch nicht welchen Server du versucht hast. Würde mich interessieren. Wenn es nicht der ProFTPd 1.3.8 war, der mit Debian 12 geliefert wird, läuft es und du kannst wirklich keinen Fehler finden.

Ich sehe halt nur ein Problem wenn man einen Server bei einem Provider hat, und der wird wohl Debian 12 haben, das man per FTP nix machen kann.

Sollte es dich trotzdem Interessieren kann ich die mal Zugang zu so einem FTP geben. Dann kannst du sehen das es nicht geht. Lass es mich wissen.

Noch mal, vielen dank für deine Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 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