[Delphi/Indy10] FTP/TSL bereikt login-fase niet...

Pagina: 1
Acties:
  • 209 views sinds 30-01-2008
  • Reageer

  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 24-01 19:42
Ik ben bezig met een TSL FTP zender, gebruik makend van Indy10 voor win32. Deze maakt netjes verbinding, dit wordt bevestigd door de logs van mijn FTP server (FileZilla Server 0.9.19):
code:
1
Connected, sending welcome message...

Dit gebeurt overigens in Implicit mode op poort 990.
Op dat punt blijft mijn programma echter steken, terwijl er volgens mij een authenticatie verzonden zou moeten worden. Dit lijkt niet te gebeuren. Na ongeveer een halve minuut volgt een timeout:
code:
1
2
421 Login time exceeded. Closing control connection.
disconnected


De gebruikte code is als volgt:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  FileList := TStringList.Create;
  FTPClient := TIdFTP.Create(NIL);
  FTPClient.TransferType := ftBinary;
  FTPClient.Passive := false;
  FTPClient.Password := 'tussenkeulen';
  FTPClient.Username := 'klant1';
  FTPClient.IOHandler := OurIOHandler;
  FTPClient.UseTLS := utUseImplicitTLS;
  FTPClient.DataPortProtection := ftpdpsPrivate;
  FTPClient.Host := 'server-adres-weggehaald';
  FTPClient.Port := 990;
  FTPClient.AUTHCmd := tAuto;

  try
    FTPClient.Connect('server-adres-weggehaald', 990); // Hier gaat het fout.
  except
    MessageBox(Handle, FTPClient.LoginMsg.Text.GetText, 'Fout 005', MB_OK );
    try
        try
            FTPClient.Disconnect;
        except
            Label_Status.Caption := 'Opnieuw verbinden...';
        end;
        FTPClient.Passive := true;
        FTPClient.Connect;
    except
        MessageBox(Handle, FTPClient.LoginMsg.Text.GetText, 'Fout 006', MB_OK );
        Label_Status.Caption := 'Kan geen verbinding maken...';
        MessageBox(Handle, PChar('Er is een fout opgetreden tijdens het maken van een verbinding. Onze excuses voor het ongemak.'), 'Fout 002', MB_OK );
        Self.ModalResult := 1;
    end;
  end;


Overigens is de MessageBox met de login-message steeds leeg.

Ook wanneer ik gebruik maak van Explicit mode gaat het fout. Wanneer ik dan inlog, zie ik keurig verschijnen dat Indy een beveiligde sessie aanvraagt, de server bevestigt dit, en verbreekt de verbinding:
code:
1
2
3
4
Connected, sending welcome message...
AUTH TLS
234 Using authentication type TLS
disconnected.

Maar aan de kant van mijn programma wordt er een exception ge-raised:
code:
1
EIDSocketError with message 'Socket error # 10054 connection reset by peer'

Waar ik zou verwachten dat Indy het verbreken van de verbinding verwacht en direct op poort 990 een veilige verbinding maakt...

Mijn code in Explicit mode:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  FTPClient := TIdFTP.Create(NIL);
  FTPClient.TransferType := ftBinary;
  FTPClient.Passive := false;
  FTPClient.Password := 'tussenkeulen';
  FTPClient.Username := 'klant1';
  FTPClient.IOHandler := OurIOHandler;
  FTPClient.UseTLS := utUseExplicitTLS;
  // FTPClient.UseTLS := utUseImplicitTLS;
  FTPClient.DataPortProtection := ftpdpsPrivate;
  FTPClient.Host := 'server-adres-weggehaald';
  FTPClient.Port := 21;
  FTPClient.AUTHCmd := tAuto;

  try
    FTPClient.Connect('server-adres-weggehaald', 21);
  except
    MessageBox(Handle, FTPClient.LoginMsg.Text.GetText, 'Fout 005', MB_OK );
    try
        try
            FTPClient.Disconnect;
        except
            Label_Status.Caption := 'Opnieuw verbinden...';
        end;
        FTPClient.Passive := true;
        FTPClient.Connect;
    except
        MessageBox(Handle, FTPClient.LoginMsg.Text.GetText, 'Fout 006', MB_OK );
        Label_Status.Caption := 'Kan geen verbinding maken...';
        MessageBox(Handle, PChar('Er is een fout opgetreden tijdens het maken van een verbinding. Onze excuses voor het ongemak.'), 'Fout 002', MB_OK );
        Self.ModalResult := 1;
    end;
  end;


Overigens heb ik zowel in Implicit als in Explicit mode geprobeerd om Connect() te vervangen door Login(). Deze lijkt echter niet veel meer te doen, en geeft bovendien een exception (access violation).

Wat doe ik hier verkeerd?

[ Voor 0% gewijzigd door NaliXL op 14-11-2006 16:36 . Reden: Volledige logs weergeven ]

Genoeg is meer dan veel, en tart den overvloed


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 09-02 23:00
Firewall dicht staan ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 24-01 19:42
De firewall is opengezet. Aan beide kanten de firewall helemaal uitschakelen heeft ook geen effect. Overigens gebeurt alles tot nu toe op een lokaal netwerk...

Genoeg is meer dan veel, en tart den overvloed


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 09-02 23:00
NaliXL schreef op woensdag 15 november 2006 @ 08:44:
De firewall is opengezet. Aan beide kanten de firewall helemaal uitschakelen heeft ook geen effect. Overigens gebeurt alles tot nu toe op een lokaal netwerk...
Mja ... mss dat je super-duper Windows Firewall roet in het eten gooit? Anyway het feit dat je client geen reactie van de server ontvangt kan naar mijn idee alleen maar aan je netwerk liggen; je mag aannemen dat de componenten iig in die fase behoorlijk getest zijn.

Wat bedoel je eigenlijk met implicit mode? Ik ken active en passive FTP ( probeer daar eens wat mee, een windows server bak staat default volgens mij op active FTP ) maar niet implicit of explicit.

[edit]
Doet ie wel normaal FTP?'
Doet ie het wel naar een lokale server?
Wat betekent die dataportprotection? ( Ik zie bv dat bij die blablaprivate jouw iohandler van een bepaald type moet zijn )
Wat doet jouw OurIOHandler callback?

[ Voor 12% gewijzigd door farlane op 15-11-2006 10:04 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 24-01 19:42
farlane schreef op woensdag 15 november 2006 @ 09:08:
[...]


Mja ... mss dat je super-duper Windows Firewall roet in het eten gooit? Anyway het feit dat je client geen reactie van de server ontvangt kan naar mijn idee alleen maar aan je netwerk liggen; je mag aannemen dat de componenten iig in die fase behoorlijk getest zijn.
De windows firewall is de enige die er momenteel tussen zat, en zoals gezegd heb ik die al uitgeschakeld zonder resultaat.
Wat bedoel je eigenlijk met implicit mode? Ik ken active en passive FTP ( probeer daar eens wat mee, een windows server bak staat default volgens mij op active FTP ) maar niet implicit of explicit.
Implicit en explicit mode zijn manieren om te verbinden met secure FTP, zoal in de Indy documentatie prima gedocumenteerd is. Ik heb active en passive mode beide al geprobeerd, maar het gaat fout al voor het moment dat er op passive modus kan worden overgeschakeld, dus daar kan het imho. niet aan liggen. Bovendien gebruik ik niet de standaard windows FTP server, maar FileZilla server.

Genoeg is meer dan veel, en tart den overvloed


  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 24-01 19:42
farlane schreef op woensdag 15 november 2006 @ 09:08:
[edit]
Doet ie wel normaal FTP?'
Doet ie het wel naar een lokale server?
Normaal onbeveiligd FTP gaat goed. De server is lokaal (op hetzelfde netwerk) en kan, zowel beveiligd met TLS als onbeveiligd, zonder problemen bereikt worden door bijvoorbeeld de FileZilla FTP cliënt.
Wat betekent die dataportprotection? ( Ik zie bv dat bij die blablaprivate jouw iohandler van een bepaald type moet zijn )
Wat doet jouw OurIOHandler callback?
DataPortProtection geeft niet meer aan dan het feit dat de verbinding beveiligd moet worden. Zie Indy documentatie.

En mijn excuses, ik heb de create van die OurIOHandler er niet bij gezet. Die staat wel in mijn programma:
Delphi:
1
OurIOHandler := TIdSSLIOHandlerSocketBase.Create;

En die is is gedeclareerd als een private class-member van de huidige form, als volgt:
Delphi:
1
var OurIOHandler : TIdSSLIOHandlerSocketBase;

Maar wat je bedoelt met de "Callback" van mijn IOHandler is me niet helemaal duidelijk :? . Kun je dat uitleggen?

Genoeg is meer dan veel, en tart den overvloed


  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 24-01 19:42
Het probleem is opgelost.

Oplossing:
In plaats van TIdSSLIOHandlerSocketBase als IOHandler te gebruiken moet TIdSSLIOHandlerSocketOpenSSL gebruikt worden. Met de nodige DLL bestanden erbij werkt het dan.

Genoeg is meer dan veel, en tart den overvloed

Pagina: 1