Italian community of Lazarus and Free Pascal

Programmazione => Componenti Aggiuntivi => Topic aperto da: Mimmo - Aprile 06, 2022, 05:21:01 pm

Titolo: FTPS con Indy e Filezilla server
Inserito da: Mimmo - Aprile 06, 2022, 05:21:01 pm
Ciao a tutti,
sto cercando di istanziare una connessione via ftps con un server filezilla (l'ultimo rilasciato, 1.3.0).
Mi sono appoggiato alle Indy, anche queste aggiornate all'ultima versione disponibile.
La connessione viene creata con successo ma quando provo a fare il list dei file mi arriva un bell'errore: "Unable to build data connection: TLS session of data connection not resumed.".
Il codice che crea la connessione è quello qui sotto. La versione delle dll openssl sotto windows è la 1.0.2u. Ho provato anche su linux ottenendo il medesimo risultato.

Codice: [Seleziona]
function TMiaClasse.CreateConnection: TIdFTP;
begin
  Result := TIdFTP.Create(nil);
  {$IFDEF LINUX}
  // https://synaptica.info/2021/01/12/delphi-10-4-1-indy-ssl-on-ubuntu-20-04/
  IdOpenSSLSetLibPath(ProgramDirectory);
  {$ENDIF}
  Result.Host:= FHost;
  Result.Username:= FUsername;
  Result.Password:= FPassword;
  if FUseFTPS then
  begin
    if not Assigned(FSSLIoHandler) then
    begin
      FSSLIoHandler := TIdSSLIOHandlerSocketOpenSSL .Create(nil);
      FSSLIoHandler.SSLOptions.Method := sslvTLSv1_2;
    end;
    Result.IOHandler:= FSSLIoHandler;
    Result.UseTLS := utUseExplicitTLS;
    Result.DataPortProtection := ftpdpsPrivate;
  end;
end;

Da quello che capisco il problema è che Filezilla ha abilitato di default la session resumption ormai obbligatoria per le connession FTPS.
Non sono riuscito a capire se le Indy la supportano oppure no e come fare per abilitarla.
Mi sembra che la risposta sia che non la supportano però in questo  post qui https://en.delphipraxis.net/topic/6114-tls-with-filezilla-ftp-server-tls-data-session-not-resumed/ (https://en.delphipraxis.net/topic/6114-tls-with-filezilla-ftp-server-tls-data-session-not-resumed/)  mi pare di intendere che chi scrive sia riuscito a far andare il collegamento con le Indy.

Qualcuno di voi ha mica avuto modo di affrontare un problema simile?
Grazie!

Mimmo
Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: DragoRosso - Aprile 06, 2022, 06:36:30 pm
Uhmm ... secondo me potrebbe esse che l'IOHandler non lo stai usando correttamente. Non sò in FTPS, ma HTTPS và gestita la connessione SSL in un altro modo, .... fammi fare una verifica e poi ti posto la probabile soluzione ....

Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: DragoRosso - Aprile 06, 2022, 08:17:39 pm
Il problema è descritto qua:

https://forum.filezilla-project.org/viewtopic.php?p=178773 (https://forum.filezilla-project.org/viewtopic.php?p=178773)

Prova questo (ma devi farlo sul SERVER ritengo, se è un server Windows ... altrimenti bisogna seguire il bug tracking), dovrebbe disattivare il TLS 1.3 a seguito del bug segnalato:

Citazione
Open regedit.exe
Create this key if it doesn't exist yet:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client
Create a new DWORD (32) Value:
Enabled
Set the value to 0x0

Non ho letto tutti i riferimenti, ma probabilmente il "componente" che gestisce la connessione TLS, se abilitato 1.3 non la gestisce correttamente (se usi la SSL 1.0.2 non hai il TLS 1.3, ma sembra che lo stesso ci sia il problema).

Appena ho un attimo di tempo metto su un server pubblico FTPS e provo.

Ciao
Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: DragoRosso - Aprile 06, 2022, 10:57:13 pm
https://cloud.dyn-o-saur.com/Ftps_Indy.zip (https://cloud.dyn-o-saur.com/Ftps_Indy.zip)

Tasto destro del mouse e salva il link sopra iindicato.

EDIT: il sito "cloud.dyn......" è mio e il programma e fatto da me. Non ci sono virus, trojan o altro. Le dll sono quelle pubbliche SSL 1.0.2u

Ehm .... è per Windows, dimmi se dopo il test (positivo  :D ) ti serve per Linux.

E' un eseguibile a 64 bit con le lib SSL che esegue una connessione di test con un TLS 1.0, 1.1, 1.2

E' fatto con Indy, ha già i dati di un server di test.

Immetti i dati del tuo server e verifica la connessione.

Se ti funziona te lo converto in Lazarus.

Ciao
Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: Mimmo - Aprile 07, 2022, 06:24:45 pm
Ciao DragoRosso,
innanzitutto grazie!!!
Ho provato a inserire le chiavi di registro sul pc su cui è installato filezilla e l'ho riavviato ma il problema purtroppo non si è risolto.
Ho provato poi ad utilizzare il tuo applicativo per collegarmi alla macchina (sempre con la nuova chiave di registro presente) ed ha restituito il medesimo messaggio di errore del mio applicativo: "tls session of data connection not resumed".
Non so se è un problema di server filezilla o di mancata implementazione della resumption nelle Indy, forse entrambe le cose: le Indy non la implementano e il server Filezilla non da più la possibilità di disabilitarla.
Il dubbio che non sia solo un baco di Filezilla mi viene dal fatto che se mi collego al server con lftp da linux, con quello riesco a leggere e scrivere senza errori (anche se il certificato, essendo auto-generato, non posso farglielo validare).
Mi sa che dovrò trovare un'alternativa a filezilla che ci consenta di funzionare senza resumption...
Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: DragoRosso - Aprile 07, 2022, 07:34:40 pm
Cosa ti dà il mio applicativo nel log? io c'è l'ho così sul server di test.

Da quel che vedo la "riconnection" avviene (rebex è chi aveva segnalato il bug di FileZilla e del GNU....)

(mio applicativo per dire, è una demo di Indy adattata per usare OpenSSL  ;D).
Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: DragoRosso - Aprile 07, 2022, 07:44:35 pm
Il dubbio che non sia solo un baco di Filezilla mi viene dal fatto che se mi collego al server con lftp da linux, con quello riesco a leggere e scrivere senza errori (anche se il certificato, essendo auto-generato, non posso farglielo validare).
Mi sa che dovrò trovare un'alternativa a filezilla che ci consenta di funzionare senza resumption...

In che senso "non posso farglielo validare" ? Occhio che potrebbe invece essere che il certificato non venga accettato dal client .... Il certificato deve sempre essere validato. Dovrebbe comparire una richiesta di consenso a proseguire se il certificato presenta problemi o in alternativa dovrebbe essere generato un errore.

Nel programma che ho postato, se la sessione TLS non può avvenire dovrebbe generare un errore nel log.

Ciao
Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: DragoRosso - Aprile 07, 2022, 10:10:57 pm
Questa è la connessione con un server filezilla 1.3.0 su windows x64 tramite il programmino che ti ho fornito.
Tls 1.2 ESPLICITA !!!

Edit: Server e Client sono su due PC diversi.

Ciao
Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: Mimmo - Aprile 08, 2022, 11:25:14 am
Ciao,
ti allego quello che ottengo io.
Visto che a te funziona, oggi pomeriggio se riesco provo a fare una prova fuori dalla intranet aziendale. M'è venuto il dubbio che il firewall possa fare qualche trusco sui certificati.. è solo un dubbio, sono un po' ignorante in materia.
Cmq grazie!

PS
Il certificato che sto usando è self-signed, è solo per fare dei test. Per pigrizia non l'ho aggiunto sul client linux nei certificati "fidati".
Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: Mimmo - Aprile 08, 2022, 12:02:26 pm
Ciao,
aggiornamento: ho aggiunto il valore che mi hai indicato anche a questa chiave di registro:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3
Riavviato e ora il tuo programma si connette!
Il mio invece no, stesso errore di prima, però vuol dire che ora c'è qualche mio errore e che il tuo workaround con filezilla è effettivamente funzionante.
Vado avanti....
Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: DragoRosso - Aprile 08, 2022, 12:09:40 pm
Ok, allora ti converto in Lazarus il programma, così vedi i setting ....

Pazienza un attimo (anche qualche attimo ...) e lo posto.

Ciao.
Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: DragoRosso - Aprile 08, 2022, 04:29:42 pm
Ecco il programma x Lazarus.

https://cloud.dyn-o-saur.com/FtpClient.zip (https://cloud.dyn-o-saur.com/FtpClient.zip)

E' stato fatto il porting dello stretto necessario e la parte grafica non è completa. C'è anche l'eseguibile già compilato (sotto BIN)
Ti consente di collegarti e di verificare i componenti ed i parametri usati per la connessione.

E' stato verificato con un server FTP Filezilla 1.3.0 con ssl privato.
Ciao
Titolo: Re:FTPS con Indy e Filezilla server
Inserito da: Mimmo - Aprile 13, 2022, 01:04:55 pm
DragoRosso,
grazie di tutto il supporto!
Ho reimpostato tutti i parametri esattamente come nella tua applicazione ma non sono comunque riuscito a venirne a capo.
Ho ricompilato il tuo programma di test esattamente con le indy che uso io e fatte altre manovre da programmatore disperato ma il risultato non è cambiato.
Alla fine ho pensato di risolverla in un altro modo: visto che ho ancora margini per modificare l'infrastruttura ho messo su un vsftpd installato su un server ubuntu.
Con quello sia l'ftps fatto dal tuo programma sia quello del mio applicativo funzionano perfettamente con tutte le loro belle connessioni criptate e quindi direi che passeremo a linux.
Grazie ancora!