TLS Session Error bei FTP Verbindung mit LIST

Maliko

Bekanntes Mitglied
Moin,

ich hab ein echt merkwürdiges Problem. Und zwar nutze ich die FTP-Bibliothek von apache.common (apache.common.net) in der Version 3.11.1. Die Verbindung funktioniert auch einwandfrei. Ich kann ne Connection aufbauen, der Login funktioniert und ich kann auch nen PWD absetzen. Sprich die CommandConnection existiert. Wenn ich dann aber versuche ein LIST abzusetzen (client.listFiles()) dann bekomme ich ein leeres Array zurück und im Log taucht die Fehlermeldung "425 Unable to build data connection: TLS session of data connection not resumed." auf.

Hier der Code den ich verwende:

Java:
public FTPHandler() {
        this._client = new FTPSClient(false);
        this._replaceblePart = "";
}

public FTPHandler Connect(String aHostname, String aUsername, String aPassword) throws IllegalStateException, IOException {
        this._client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true));
        
        String[] ver = {"TLSv1.3"};
        this._client.setEnabledProtocols(ver);
        this._client.connect(aHostname);
        this._client.login(aUsername, aPassword);
        this._client.execPBSZ(0);      // Protection Buffer Size = 0
        this._client.execPROT("P");    // PROT = Private, also verschlüsselter Datenkanal
        this._client.enterLocalPassiveMode();
        
        return this;
}

private Boolean CheckCurrentFolder(String folder) throws IllegalStateException, IOException {
        String actualPath = this._client.printWorkingDirectory();
        FTPFile[] files = this._client.listFiles();
        
        for (FTPFile file : files) {
            if(file.getName().equals(folder)) {
                return true;
            }
        }
        
        return false;
}

Hat vielleicht irgendjemand von euch eine Ahnung was da schief läuft? Hier auch noch einmal der komplette Log:

220-FileZilla Server 1.10.4
220 Please visit https://filezilla-project.org/
AUTH TLS
234 Using authentication type TLS.
USER *******
331 Please, specify the password.
PASS *******
230 Login successful.
PBSZ 0
200 PBSZ=0
PROT P
200 Protection level set to P
PWD
257 "/" is current directory.
SYST
215 UNIX emulated by FileZilla.
PASV
227 Entering Passive Mode (10,100,10,21,227,58)
LIST
150 Starting data transfer.
425 Unable to build data connection: TLS session of data connection not resumed.
 
Das scheint ein Problem mit der TLS Session Absicherung.

Probier mal, vor dem öffnen von Datenverbindungen ein setEnablesSessionCreation(false) zu setzen. (Zur Konfiguration des Session Resumption).

Nutzt Du mit anderen Clients auch explizit TLS 1.3? Nicht dass der Server kein Session Resumption mit TLS 1.3?

Generell wäre die klare Empfehlung auf FTPS zu verzichten und statt dessen auf SFTP zu setzen. Je mehr Du bei den Protokollen auf die setzt, die "üblich" sind, desto weniger Probleme hast Du (breitere Anwendung dadurch besseres Austesten und deutlich mehr Leute, die Erfahrungen damit teilen!)
 
Zum Thema TLS. Jap tun wir, der Server akzeptiert auch nix anderes (habs ausprobiert). Den Tipp mit setEnablesSessionCreation probiere ich morgen mal aus, wenn ich wieder im Büro bin. Und was die FTP-Art angeht, da hab ich leider kein Mitspracherecht. Ich muss damit arbeiten was die Sysadmins uns da hinstellen. Und die mögen aus irgendeinem Grund FTPS deutlich lieber als SFTP (und da stoße ich auch auf taube Ohren, abgesehen davon das fast alle Systeme inzwischen umgestellt sind)
 
Habs grad ausprobiert. Leider bringt das auch nichts. Jetzt bekomme ich ne HandshakeException "No new session is allowed and no existing session can be resumed".
 
Nope. Selbe Fehlermeldung. Ich hab inzwischen das System übrigends Testweise auf ftp4j umgestellt und bekomme da die selbe Fehlermeldung.
 
Nach der JSSE-Doku gäbe es die Properties jdk.tls.client.enableSessionTicketExtension und jdk.tls.server.enableSessionTicketExtension. Wenn ich es richtig verstehe, wird standardmäßig ein Ticket gesendet, eventuell kommen Java und der FTP-Server nicht miteinander zurecht.

This should improve the performance and memory usage of the TLS server under large workloads as the session cache will seldom be used. However, with less session information cached, some session information may not be available. This feature is enabled by default; you can turn it off by setting two system properties

Vielleicht hilfts.
 
Wenn ich das richtig sehe, gibt es einen Konstruktor welcher einen SSLContext uebernimmt), eventuell musst du den SSLContext korrekt konfigurieren und uebergeben.

Eine andere Moeglichkeit ist Bouncy Castle fuer Java einzuhaengen und dass fuer die TLS-Verbindung zu verwenden. Das ist eine andere Implementierung und eventuell umgehst du damit einen Dreher in der Java-Implementierung (oder es verwendet einfach andere Annahmen wenn es um die Verbindung geht).
 

Neue Themen


Zurück
Oben