AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Overbyte FTPS und Datachannel
Thema durchsuchen
Ansicht
Themen-Optionen

Overbyte FTPS und Datachannel

Ein Thema von DelTurbo · begonnen am 10. Mär 2025 · letzter Beitrag vom 18. Mär 2025
Antwort Antwort
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.237 Beiträge
 
Delphi 2007 Architect
 
#1

Overbyte FTPS und Datachannel

  Alt 10. Mär 2025, 16:08
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
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.869 Beiträge
 
Delphi 12 Athens
 
#2

AW: Overbyte FTPS und Datachannel

  Alt 11. Mär 2025, 00:13
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.
Sebastian Jänicke
AppCentral

Geändert von jaenicke (11. Mär 2025 um 00:15 Uhr)
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.237 Beiträge
 
Delphi 2007 Architect
 
#3

AW: Overbyte FTPS und Datachannel

  Alt 11. Mär 2025, 10:07
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;
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.237 Beiträge
 
Delphi 2007 Architect
 
#4

AW: Overbyte FTPS und Datachannel

  Alt 12. Mär 2025, 10:01
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?!?
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.869 Beiträge
 
Delphi 12 Athens
 
#5

AW: Overbyte FTPS und Datachannel

  Alt 12. Mär 2025, 10:34
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.237 Beiträge
 
Delphi 2007 Architect
 
#6

AW: Overbyte FTPS und Datachannel

  Alt 12. Mär 2025, 11:53
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.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!

Geändert von DelTurbo (12. Mär 2025 um 12:18 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 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 by Thomas Breitkreuz