Page 1 of 3 1 2 3 LastLast
Results 1 to 15 of 31

Thread: FTPS vraag - voorbeelden niet compleet?

  1. #1

    FTPS vraag - voorbeelden niet compleet?

    Onze applicatie heeft van orgine een onbeveiligde FTP koppeling die omgezet moet worden naar een FTPS verbinding (FTP over SSL)

    Daarvoor bevat de code

    Code:
        IndyFtp             : TIdFTP ;
    dat wordt als volgt opgezet:
    Code:
      IndyFtp.Host := FServerName;
      IndyFtp.Username := FLogin_naam;
    
      IndyFtp.Password := FLogin_FTPww;
      IndyFtp.TransferType := ftBinary;
       if( Fpassief = 'j' ) then
        IndyFtp.Passive := true;
    
      IndyFtp.OnWork := nil;
    Port is standaard (21), wat zonder meer zou moeten kunnen.
    Dan:

    Code:
    	  IndyFtp.Connect();
    en vervolgens, als een bestand opgehaald moet worden:

    Code:
            if IndyFtpGet(Bestandsnaam, xmlStream) then
    of voor verzenden:

    Code:
            if not IndyFtpPut(xmlStream, Bestandsnaam) then
    Dat gaat prima (al jaren).
    Voor de beveiligde (FTP over SSL) is op de server al een en ander opgezet, en in de opzet van IndyFTP heb ik, naar voorbeelden op Internet, toegevoegd:

    Code:
      IdSSLIOHandlerSocketOpenSSL1:= TIdSSLIOHandlerSocketOpenSSL.Create(nil) ;
      IndyFTP.IOHandler := IdSSLIOHandlerSocketOpenSSL1 ;
      IndyFTP.UseTLS := utUseExplicitTLS;
      IndyFTP.DataPortProtection := ftpdpsPrivate;
    FPT.Connect die daarop volgt gaat goed ( - die blijkt ook ook login uit te voeren - wat altijd zo geweest is) , maar FTPPut geeft timeout, FTPGet waarschijnlijk ook. (Windows error 10060). Het zit diep in Indy (TIdFTP.Put( --> TIdFTP.InternalPut --> TIdFTP.FinalizeDataOperation --> IdTCPConnection.TIdTCPConnection.GetResponse --> TIdTCPConnection.GetInternalResponse) waar het fout lijkt te gaan op

    Code:
        repeat
          LLine := IOHandler.ReadLnWait;  <------- hier zit de timeout op...
          LResponse.Add(LLine);
        until FLastCmdResult.IsEndMarker(LLine);
    Ik heb het vermoeden dat ik nog wat mis in de instellingen, maar ik kan nergens iets vonden wat daar ingesteld zou moeten worden.
    Wat mis ik nog? (links zijn ok).

  2. #2
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Heb je de SLL DLL's in dezelfde map als je exe staan?
    TMemoryLeak.Create(Nil);

  3. #3
    nee, ook niet onder de Windows directory...Wat mij verbaast, elders gebruik ik al wel verbindingen over SSL (HTTP(S), SMTP en POP3, met en zonder certificaat) en die doen het wel, ook zonder libseay.dll en ssleay.dll... In elk geval opgehaald en in dezelfde directory gezet als het programma, maar geen verschil: error 10060.

  4. #4
    Quote Originally Posted by WillemGrooters View Post
    In elk geval opgehaald en in dezelfde directory gezet als het programma, maar geen verschil: error 10060.
    Is je applicatie 32 bit of 64 bit?
    Je moet wel de juiste DLL's downloaden en in je exe directory zetten (met dezelfde bitness als je programma).

  5. #5
    Duh.. In dit geval 32 bit. Hoe zit dat overigens in een 64-bit omgeving met een 32-bit programma?

  6. #6
    Ook gewoon de 32-bit DLL's gebruiken.
    De DLL-bitness moet matchen met de bitness van je programma (niet die van je OS).

  7. #7
    Dit zijn in elk geval de 32-bit versies.
    Maar probleem is volgens mij niet dat de DDL's ontbreken (andere SSL-gebaseerde verbindingen doen het immers ook). Wat me wel opgevallen is: Ik krijg Filezilla ook niet opgewaardeerd - want
    [QUOTE
    ]Antwoord: Location: https://netcologne.dl.sourceforge.ne...in32-setup.exe
    Status: Adres oplossen van netcologne.dl.sourceforge.net
    Status: Verbinden met 78.35.24.46:443...
    Status: Verbinding aangemaakt, TLS initialiseren...
    Fout: Rootcertificatie is niet vertrouwd
    Fout: Verbinding verbroken met server: ECONNABORTED - Connection aborted
    Fout: Verbinding verbroken met server
    Fout: Bestandsoverdracht mislukt
    [/QUOTE]

    IS er een mogelijkheid (buiten Wireshark ) om de communicatie te onderscheppen? Wellicht geeft dat meer informatie....

  8. #8
    Andere SSL-gebaseerde programma's hoeven niet perse met OpenSSL te werken.
    Indy (en volgens mij ook FileZilla) maken daar wel gebruik van.

    Ik neem aan dat je een recente versie van OpenSSL in je programma dir gezet hebt.
    (had onlangs dat een server niet meer wilde werken met de oude)

    Filezilla 3.8.0 ??? Is dat niet een hele oude? (uit 2014 !!)
    Hier is 3.30.0 de huidige versie (direct naar unbundled versies)
    https://filezilla-project.org/download.php?show_all=1

  9. #9
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    Als het een aanvaardbare optie is om de FTPS-transactie zelf door een extern programma te laten uitvoeren, dan kan ik WinSCP warm aanbeven. Met eerst argumenten /nointeractiveinput /command met daarna een lijst commando's tussen "" (zoals open, cd, get, put, zeker eindigen met "exit" vreemd genoeg) kan je normaal alles doen.

  10. #10
    Quote Originally Posted by develyoy View Post
    Als het een aanvaardbare optie is om de FTPS-transactie zelf door een extern programma te laten uitvoeren, dan kan ik WinSCP warm aanbeven. Met eerst argumenten /nointeractiveinput /command met daarna een lijst commando's tussen "" (zoals open, cd, get, put, zeker eindigen met "exit" vreemd genoeg) kan je normaal alles doen.
    Dat is eigenlijk geen optie...alleen als het ECHT niet anders kan, en dan allerliefst (=alleen) zonder enig extra werk voor de gebruiker/systeembeheerder.

    Ik zit me af te vragen:
    Fout: Rootcertificatie is niet vertrouwd
    Fout: Verbinding verbroken met server: ECONNABORTED - Connection aborted
    Fout: Verbinding verbroken met server
    Daar moet toch omheen te werken zijn?

  11. #11
    Quote Originally Posted by WillemGrooters View Post
    Daar moet toch omheen te werken zijn?
    Dat lijkt mij niet. Hij geeft aan Rootcertificaat is niet vertrouwd. Lijkt mij iets heel essentieels

    Antwoord: Location: https://netcologne.dl.sourceforge.ne...in32-setup.exe
    Status: Adres oplossen van netcologne.dl.sourceforge.net
    Status: Verbinden met 78.35.24.46:443...
    Status: Verbinding aangemaakt, TLS initialiseren...
    Fout: Rootcertificatie is niet vertrouwd
    Fout: Verbinding verbroken met server: ECONNABORTED - Connection aborted
    Fout: Verbinding verbroken met server
    Fout: Bestandsoverdracht mislukt
    Maar probeer je nu hier een SFTP verbinding op te bouwen met een HTTPS server???

    (Waarom dat bestand dan niet gewoon via HTTPS binnentrekken??)

  12. #12
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Dit geldt voor HTTPS, maar het zou me niets verbazen als het bij SFTP identiek is.

    Quote Originally Posted by StackOverflow
    You have to implement a event handler for the OnVerifyPeer event of your TIdSSLIOHandlerSocketOpenSSL component.

    From IdSSLOpenSSL.pas:


    Note that you really should always implement OnVerifyPeer, otherwise the certificate of the peer you are connecting to is NOT checked to ensure it is valid.

    If you just want to consider valid the same certificates the Library considers also valid, you just have to implement it this way:
    function TForm1.IdSSLIOHandlerSocketOpenSSL1VerifyPeer(Cert ificate: TIdX509;
    AOk: Boolean; ADepth, AError: Integer): Boolean;
    begin
    Result := AOk;
    end;

    As Indy first checks for the validity of the certificate and pass you if it is Ok or not in the AOk parameter. The last word is in your code, as you may want to let pass some kinds of minor validation errors, like being out of date, or even ask the user if the certificate is accepted or not in case of any error (minor or not).
    TMemoryLeak.Create(Nil);

  13. #13
    Met FileZilla lukt het wel - ExplicitTLS: Al krijg ik dan de medling dat het certificaat onbekend is. Ik kan dan wel doorgaan:

    Status: Adres oplossen van xxxxxx.nl
    Status: Verbinden met x.x.x.x:21...
    Status: Verbinding aangemaakt, welkomstbericht afwachten...
    Antwoord: 220 (vsFTPd 2.2.2)
    Commando: AUTH TLS
    Antwoord: 234 Proceed with negotiation.
    Status: TLS initialiseren...
    Status: Certificaat controleren....
    Commando: USER xxxx
    Status: TLS-/SSL-verbinding gemaakt.
    Antwoord: 331 Please specify the password.
    Commando: PASS *******
    Antwoord: 230 Login successful.
    Commando: SYST
    Antwoord: 215 UNIX Type: L8
    Commando: FEAT
    Antwoord: 211-Features:
    Antwoord: AUTH SSL
    Antwoord: AUTH TLS
    Antwoord: EPRT
    Antwoord: EPSV
    Antwoord: MDTM
    Antwoord: PASV
    Antwoord: PBSZ
    Antwoord: PROT
    Antwoord: REST STREAM
    Antwoord: SIZE
    Antwoord: TVFS
    Antwoord: UTF8
    Antwoord: 211 End
    Commando: OPTS UTF8 ON
    Antwoord: 200 Always in UTF8 mode.
    Commando: PBSZ 0
    Antwoord: 200 PBSZ set to 0.
    Commando: PROT P
    Antwoord: 200 PROT now Private.
    Status: Verbonden
    Status: Mappenlijst ophalen...
    Commando: PWD
    Antwoord: 257 "/"
    Commando: TYPE I
    Antwoord: 200 Switching to Binary mode.
    Commando: PASV
    Antwoord: 227 Entering Passive Mode (192,168,1,163,255,185).
    Status: Server genereerde een passief antwoord met een ontraceerbaar adres. Gebruikt het serveradres in de plaats.
    Commando: LIST
    Antwoord: 150 Here comes the directory listing.
    Antwoord: 226 Directory send OK.
    Status: Tijdzoneverschil van server calculeren...
    Commando: MDTM afspraaktypes20180305170942000.xml
    Antwoord: 213 20180305160944
    Status: Tijdzoneverschillen: server - 0 seconden, lokaal - 7200 seconden. Verschil: 7200 seconden.
    Status: Mappenlijst succesvol ontvangen
    en kan dan bestanden ophalen (en ook wegzetten):
    .
    Status: Adres oplossen van xxxxxx.nl
    Status: Verbinden met x.x.x.x:21...
    Status: Verbinding aangemaakt, welkomstbericht afwachten...
    Antwoord: 220 (vsFTPd 2.2.2)
    Commando: AUTH TLS
    Antwoord: 234 Proceed with negotiation.
    Status: TLS initialiseren...
    Status: Certificaat controleren....
    Commando: USER xxxx
    Status: TLS-/SSL-verbinding gemaakt.
    Antwoord: 331 Please specify the password.
    Commando: PASS *******
    Antwoord: 230 Login successful.
    Commando: OPTS UTF8 ON
    Antwoord: 200 Always in UTF8 mode.
    Commando: PBSZ 0
    Antwoord: 200 PBSZ set to 0.
    Commando: PROT P
    Antwoord: 200 PROT now Private.
    Status: Verbonden
    Status: Download starten van /export.xml
    Commando: CWD /
    Antwoord: 250 Directory successfully changed.
    Commando: PWD
    Antwoord: 257 "/"
    Commando: TYPE A
    Antwoord: 200 Switching to ASCII mode.
    Commando: PASV
    Antwoord: 227 Entering Passive Mode (192,168,1,163,251,94).
    Status: Server genereerde een passief antwoord met een ontraceerbaar adres. Gebruikt het serveradres in de plaats.
    Commando: RETR export.xml
    Antwoord: 150 Opening BINARY mode data connection for export.xml (1479 bytes).
    Antwoord: 226 Transfer complete.
    Status: Bestandsoverdracht succesvol, 1.479 bytes in 1 seconde overgedragen
    Dat zijn volgens mij dezelfde instellingen als in het programma.
    Er zit diep in de indy code iets waardoor GET op een timeout loopt, en PUT geen verbinding kan maken (om dezelfde reden), Het kan zijn dat het te maken heeft met dat certificaat - dus dan moet ik nog iets doen om dat af te vangen.

    Als ik geen TLS gebruik is er niets aan de hand - met verder dezelfde instellingen. het enige verschil is dat met TLS het volgende wordt uitgevoerd:

    Code:
        IdSSLIOHandlerSocketOpenSSL1:= TIdSSLIOHandlerSocketOpenSSL.Create(nil) ;
        IndyFTP.IOHandler := IdSSLIOHandlerSocketOpenSSL1 ;
        IndyFTP.UseTLS := utUseExplicitTLS;
        IndyFTP.DataPortProtection := ftpdpsPrivate;
    wat volgens de voorbeelden die ik gevonden heb, het enige zou moeten zijn.
    Dus wat mis ik dan nog in de instellingen?

    BTW: het certificaat zoals FileZilla dat toont is geldig en de informatie is correct; Omdat dit een point-to-point connectie is kan/mag ik dat certificaat vertrouwen, ook al is het voor FileZilla (en andereen) onbekend. ik voermoed dat hetzelfde certificaat ook voor de https-connecties gebruikt wordt, en daar komt dan geen melding van.
    Last edited by WillemGrooters; 02-May-18 at 12:54.

  14. #14
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    Nu vraag ik me wel plots af of ouwe getrouwe WinInet FTPS Zou aankunnen... Ik zie het jammer genoeg niet direct staan :-(

  15. #15
    Anders Synapse van ararat wel.

Page 1 of 3 1 2 3 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •