Jump to content

AllanF

Members
  • Content Count

    32
  • Joined

  • Last visited

Posts posted by AllanF


  1. I already have a TSslWSocketServer listening on port NNNN and successfully accepts TSSLWSocket client connections. All this happens within the context of my Delphi Applications. Now I need to provide an API in my application. I want to use the existing TSslWSocketServer to listen to any REST calls also. REST call comes in successfully and I can read the content in DataAvailable Event too. My problem is that I cannot send back any message to the REST Client. I am using (Sender as TClientConnection).SendStr('Hi') but it does not reach the REST Client.

    I know this is not the appropriate way but I just need to send some indication that message has been received.


  2.  

    I did changes as you mentioned and it is working now.

    Thank You.

     

     

    unit OverbyteIcsFtpSrv;

    ...

    ...

     


    function DirExists(const Dir : String) : Boolean;                 { V1.52 AG}
    { INVALID_HANDLE_VALUE = INVALID_FILE_ATTRIBUTES = DWORD(-1) }
    {$IFDEF MSWINDOWS}
    var
        Res : DWORD;
    begin
        Result := {$IFDEF RTL_NAMESPACES}System.{$ENDIF}SysUtils.DirectoryExists(UnicodeString(Dir));
       exit ;

    //    Res := GetFileAttributes(PChar(Dir));
      //  Result := (Res <> INVALID_HANDLE_VALUE) and
        //          ((Res and FILE_ATTRIBUTE_DIRECTORY) <> 0);
    end;
    {$ENDIF}
    {$IFDEF POSIX}
    begin
        Result := System.SysUtils.DirectoryExists(Dir);  { V8.50 }
    end;
    {$ENDIF}


  3. The function returns True even though pointing to a files that does not exist

    function DirExists(const Dir : String) : Boolean;    
         // Dir = 'c:\23000\Pqr.txt'
    var
        Res : DWORD;
    begin
        Res := GetFileAttributes(PChar(Dir));
            // Res = 4294967295 
        Result := (Res <> INVALID_HANDLE_VALUE) and
                  ((Res and FILE_ATTRIBUTE_DIRECTORY) <> 0);
            // Res and FILE_ATTRIBUTE_DIRECTORY   = 16

    // (Res <> INVALID_HANDLE_VALUE) and ((Res and FILE_ATTRIBUTE_DIRECTORY) <> 0)

    // Though having the same value this line return True in 64Bitness and False in 32Bitness
    end;

    procedure TFtpServer.CommandRNTO(
    ...
        if FileExists(FileName) or DirExists(Filename) then 

              Answer =    '553 ''/c:/23000/Pqr.txt'': file already exists.'


  4. On Server Side I have been successfully using TSslFtpServer (Delphi Seattle) with IcsHosts for SSL

    From Client Side I PUT a File , Check Size after Copy & Finally Rename the File.

    All this has worked fine for years.

     

    My Server Side Exe was 32 Bit. Now I want to make it 64Bit Exe.

    From Client side Copy takes place , Size checking takes place but Rename does not happen.

    I get the error

    450 File '/c:/Sample/Abc.txt' can't be renamed

     

    64 Bit works fine without SSL


  5. Since my application is already in use at few customer's installations and is running smoothly, I did not have the courage to make major changes.

    It is actually the user passwords that I is saved in my databases with some basic encryption that were giving this problem.

    Putting both your valuable advice together I did make a routine that goes thru the String prior to the Send operation, character by character and recognizes Ord(...) > 65375.

    I am now converting that Password into Simple text and upon reaching destination reversing it again. Since my String's are made of a Tagged parts it is simple to extract the problem areas.

    Thank You for the support.

     


  6. Hi,

     

    I am using ICS Components with Delphi Seattle to send text between Server to Client and vice versa.
    But when using higher values like Chr(65470) the transfer does not happen correctly.

     

    Server Side:  TSslWSocketServer 
      Client : TClientConnection;
      Client.SendText('Hi '+Chr(65445)+Chr(65470)+#13#10);

     


     

    Client Side:  TSSLWSocket
    procedure Tform_ClientSocket.SockClient_SsrvClientDataAvailable(Sender: TObject; ErrCode: Word);
    var
      FRcvdLine:WideString ;  // AnsiString does not work either
    begin
      FRcvdLine := TSSLWSocket(Sender).ReceiveStrA  ;
    Hi ??
    

     

    Regards
    Allan


  7. Hi,

     

    I am using TSslWSocket (TSslContext) to connect to TSslWSocketServer (using IcsHosts)

    Is it possible to avoid TSslContext on Client Side too ?

     

    I am asking because the Client side loses out some data initially upon just connecting.

    Without SSL same code work fine.

    I tried to prepare a small sample but that works fine with SSL too.

     

    I am using Delphi Seattle on Windows 10, Single machine, Two Exe's (Server and Client) for testing

     

    Regards

    Allan


  8. Hi 

    I am currently using TSslFtpServer and TSslWSocketServer in combination with SslContext but there are connection issues coming up recently with Failed SSL Handshake before negotiation.

    Instead of chasing that I want to update to the current technique of using ICSHosts. Here I am stuck when trying to connect with FileZilla Client my Server comes into ClientConnect Event

    and then in ClientCommand  Keyword is empty and then control goes to ClientDisconnect. Does not go into Validation etc.

     

    The problem is that there is no example using ICSHosts, so I used the OverbyteIcsSslFtpServ example removing the SslContext and adding a Item in IcsHosts

    Kindly note that mine is an application wherein I have a Server module running on one machine and I have several machines connecting to the Server

    There is no Website I can validate 'HostNames.Strings' with, so hope machine name will do ?

     

    DFM section of TSslFtpServer

        IcsHosts = <
          item
            HostNames.Strings = ('VMAF')
            HostEnabled = True
            HostTag = 'MyTag'
            SslCert = '01cert.pem'
            SslKey = '01key.pem'
            SslInter = 'cacert.pem'
          end>

     

    since 01cert.pem etc. are not working here I made fresh Certificates which I tested and are working with the SslContext.

     

    Regards

    Allan


     


  9. I am using ICS TSslFTPServer (FtpSslType=ftpAuthTls,ftpAuthSsl) and TSslWSocketServer (SslEnable=True) on my Server side application along with TSslContext wherein I am pointing to SslPrivKeyFile and SslCertFile to your sample 01key.pem and 01cert.pem respectively. My Client Application connects and all is well.

     

    problem-1) If I try to change the certificates to another of your provided examples or If I build with OpenSSL it gives error 

    'Can't read certificate file ... error:0909006C:PEM routines:get_name:no start line'

     

    problem-2) Using SSL I lose compatibility with WinXP and probably with Vista too. Is there a workaround ?

     

    (Angus has suggested me to use the IcsHosts property instead of SslContext but I will need to do more work to get it working for me, hope I am using above mentioned components properly to begin with SSL)

     

    (How I generated my own PEM files

    openssl genpkey -aes256 -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out 01key.pem

    openssl pkey -in 01key.pem -out 01cert.pem -pubout)


  10. I am using TSslFtpServer , TSslWSocketServer along with TSSLContext component successfully when using the SslCAFile , SslCertFile and SslPrivateKeyFile properties to point to files on the Hard Disk.

    I noticed there are matching SslCALines , SslCertLines and SslPrivateKeyLines . I filled these properties with text from the corresponding files but it did not work. I am asking this because I would prefer not to expose the Certificate files.

     


  11. Considering all the advice I prefer to use the P12 files and stick to SSL as it will work for both Sockets and FTP.

     

    Just wanted some more clarity. 

     

    Is the Username and password used in the connect statement of the FTP Client and Authenticated at the FTP Server have to do anything with preparation of the SSL Certificates ? 

     

    I am trying to create Self Signed Certificates using  IcsSslBuildCerts.bat and I get several files. I don't know which to use , whatever combination is not working. 


    RootKey.pem, RootReq.pem, RootCert.pem, Root.pem

    ServerCAkey.pem, ServerCAreq.pem, ServerCAcert.pem, ServerCA.pem,

    ServerKey.pem, ServerReq.pem, Server.pem, ServerCert.pem
    ClientKey.pem, ClientReq.pem, ClientCert.pem, Client.pem

     

    Using ICS demo 01cert.pem, 01key.pem and cacert.pem works fine.

     


  12. True that customers will love to hear TLS ☺️

    Angus has given loads of demos / Self signed certificates etc. Just wanted to know I am doing the right thing. 

    Will update my Servers to use SSL. 

     

    I suppose the PEM files will have to reside in my application folder itself ?

    Will give each customer a new certificate (unless he has his own).

     


  13. Thanks for the valuable info you have provided. Seems like I may not require any more security measures apart from what I already have. Please allow me to explain my current scenario and kindly let me know if I have a vulnerability.

     

    As mentioned earlier I have TFTPServer and TWSocketServer on Server. Client machine's TWSocket is always connected to the Server's TWSocketServer. Only simple info is passed via the sockets. All files are passed via FTP (encrypted if critical).

     

    When Client Socket connects to the Server Socket I validate if first OnClientData is as per my expected format else I abort that Client connection.

     

    For FTP connection I send a new username and password at each connect FTP Server understands it is correct by doing a matching system between Username and Password.

     

    When files are exchanged between client and server they are AES256 encrypted and the server just stores it on his machine, Server does not need to decrypt it. So there is no password exchanged for File Decryption purpose.

     

     


  14. Hi,

     

    I am using ICS TFTPServer and TWSocketServer on my Server side application (Delphi Seattle). I want to use SSL to secure the connections.

    This question is more related to SSL rather than ICS. 

    I have read on SSL and checked the Demo programs too. I yet need some clarity.

    Mine is a backup application and will be sending critical data over the WAN. 

     

    If I generate my own certificates via OpenSSL where do I keep the PEM files for the ICS Server components to access ?

    Should I generate a different PEM file per customer upon installation or can I supply a common one ?

    I files are large can I have only password exchanged secretly and data without encryption (My data is already compressed with AES ) ?


    Regards

    Allan

    (Thanks for all the new features in ICS)

×