Funzionalità — sgcIndy | eSeGeCe

Funzionalità di sgcIndy

Componenti Indy TCP/IP avanzati con supporto OpenSSL 1.1/3.0, autenticazione XOAuth2 e rete migliorata per Delphi e Free Pascal.

Supporto OpenSSL moderno

Aggiorna le tue applicazioni Indy con le librerie OpenSSL e gli standard TLS più recenti.

OpenSSL 1.1

Supporto completo per OpenSSL 1.1.x con TLS 1.2 e TLS 1.3. Sostituzione drop-in per l'integrazione OpenSSL legacy di Indy.

OpenSSL 3.0

Supporto per l'ultima serie OpenSSL 3.x con la nuova architettura basata su provider, conformità FIPS e gestione migliorata delle cipher suite.

TLS 1.3

Supporto TLS 1.3 di prima classe con ripresa 0-RTT, prestazioni migliorate dell'handshake e cipher suite moderne.

XOAuth2 e TCP/IP avanzato

Autenticazione XOAuth2

Supporto XOAuth2 integrato per Gmail, Outlook e altri provider OAuth 2.0. Autentica connessioni SMTP, IMAP e POP3 con flussi OAuth moderni.

TCP/IP avanzato

Gestione migliorata delle connessioni, gestione keep-alive, controllo dei timeout e gestione dei buffer rispetto ai componenti Indy standard.

Gratuito e aperto

sgcIndy è gratuito da usare. Compatibile da Delphi 7 fino a RAD Studio 13 e Free Pascal/Lazarus. Nessun costo di licenza o royalty.

Client SSH — TIdSSHClient

Client SSH 2.0 completo per connessioni remote sicure. Esegui comandi, apri shell interattive e configura il port forwarding — tutto su canali crittografati.

Esecuzione remota sicura

TIdSSHClient gestisce l'intero ciclo di vita SSH: scambio di versioni, negoziazione delle chiavi, autenticazione utente e gestione dei canali. Connettiti a qualsiasi server SSH ed esegui comandi, apri shell o inoltra porte con un'API di componenti Delphi pulita.

  • Autenticazione tramite password, chiave pubblica e keyboard-interactive
  • Execute() — esegui un comando remoto e ottieni l'output in una sola chiamata
  • RequestShell / RequestPTY — apri sessioni di terminale interattive
  • Port forwarding — tunneling TCP/IP locale e remoto tramite OpenDirectTCPIP e RequestForwarding
  • Multi-canale — apri più sessioni simultanee su una singola connessione
SSH_Example.pas
var
  SSH: TIdSSHClient;
  Output: string;
begin
  SSH := TIdSSHClient.Create(nil);
  try
    SSH.Host := 'server.example.com';
    SSH.Port := 22;
    SSH.Authentication.Username := 'admin';
    SSH.Authentication.Password := 'secret';
    SSH.Connect;

    // Esegui un comando e ottieni l'output
    Output := SSH.Execute('ls -la /var/log');
    Memo1.Text := Output;

    SSH.Disconnect;
  finally
    SSH.Free;
  end;
end;

Autenticazione

Metodi tramite password, chiave pubblica (RSA, ECDSA, ED25519) e keyboard-interactive. Carica chiavi private da file PEM con passphrase opzionale. Verifica della chiave host tramite l'evento OnSSHHostKey.

Crittografia moderna

Scambio di chiavi Curve25519, ECDH e Diffie-Hellman. Cipher AES-CTR e AES-GCM. Autenticazione dei messaggi HMAC-SHA2. Preferenze algoritmiche configurabili tramite la proprietà Algorithms.

Canali e sottosistemi

Apri più canali su una singola connessione con OpenChannel. Richiedi exec, shell o sottosistema (come SFTP) per canale. Invia dati, segnali e EOF in modo indipendente per ciascun canale.

Keep-alive e timeout

Intervallo di keep-alive e numero massimo configurabili per rilevare connessioni inattive. Timeout di connessione e lettura tramite SSHOptions. Supporto per re-keying automatico tramite Rekey().

Port forwarding

Tunneling da locale a remoto con OpenDirectTCPIP. Forwarding da remoto a locale con RequestForwarding e CancelForwarding. Inoltra qualsiasi traffico TCP attraverso la connessione SSH crittografata.

Eventi ricchi

OnSSHChannelData per i dati in arrivo, OnSSHChannelExitStatus per i risultati dei comandi, OnSSHAuthBanner per i banner del server e OnSSHError per la gestione degli errori. Architettura completamente basata su eventi.

Client SFTP — TIdSFTPClient

Trasferimento sicuro di file su SSH. Carica, scarica e gestisci file e directory remote con tracciamento dell'avanzamento e supporto completo degli attributi.

Operazioni sicure sui file

TIdSFTPClient è costruito sopra TIdSSHClient e gestisce automaticamente il sottosistema SFTP. Fornisce un'API di alto livello per tutte le operazioni comuni sui file — senza bisogno di gestire manualmente canali SSH o il protocollo SFTP.

  • Get / Put — scarica e carica file tramite percorso o stream
  • ListDirectory — elenca i contenuti delle directory remote con gli attributi dei file
  • Delete / Rename — gestisci file e directory remote
  • MakeDirectory / RemoveDirectory — crea e rimuovi cartelle
  • OnSFTPProgress — traccia l'avanzamento del trasferimento con byte trasferiti, dimensione totale e supporto all'annullamento
SFTP_Example.pas
var
  SFTP: TIdSFTPClient;
  Items: TIdSFTPDirectoryItems;
  i: Integer;
begin
  SFTP := TIdSFTPClient.Create(nil);
  try
    SFTP.Host := 'sftp.example.com';
    SFTP.Authentication.Username := 'admin';
    SFTP.Authentication.PrivateKeyFile :=
      'C:\Keys\id_rsa';
    SFTP.Connect;

    // Carica un file
    SFTP.Put('C:\local\report.pdf',
      '/remote/reports/report.pdf');

    // Elenca la directory
    Items := SFTP.ListDirectory('/remote/reports');
    for i := 0 to Items.Count - 1 do
      Memo1.Lines.Add(Items[i].FileName);

    // Scarica un file
    SFTP.Get('/remote/data.csv',
      'C:\local\data.csv');

    SFTP.Disconnect;
  finally
    SFTP.Free;
  end;
end;

Trasferimenti di file

Get() scarica file remoti in un percorso locale o TStream. Put() carica da un percorso locale o TStream. Dimensione del buffer configurabile tramite SFTPBufferSize per un throughput ottimale. OnSFTPProgress si attiva durante il trasferimento con byte trasferiti, dimensione totale e un flag Cancel.

Operazioni sulle directory

ListDirectory() restituisce TIdSFTPDirectoryItems con nome file, dimensione, permessi, timestamp e tipo per ogni voce. MakeDirectory() e RemoveDirectory() per la gestione delle cartelle. GetCurrentDirectory() restituisce il percorso di lavoro remoto.

Attributi dei file

Stat() e LStat() recuperano dimensione, permessi, UID/GID e timestamp. SetStat() modifica gli attributi remoti. FileExists(), DirectoryExists() e FileSize() per controlli rapidi. Supporto ai symlink tramite Symlink() e ReadLink().

Helper per stringhe

GetFileAsString() legge un file remoto direttamente in una stringa Delphi. PutFileFromString() scrive una stringa in un file remoto. RealPath() risolve percorsi relativi o simbolici nella loro posizione assoluta sul server.

Autenticazione SSH

Eredita tutta l'autenticazione SSH da TIdSSHClient: password, chiave pubblica (RSA, ECDSA, ED25519) e keyboard-interactive. Imposta le credenziali tramite la proprietà Authentication. Evento OnSSHHostKey per la verifica del server.

Eventi e avanzamento

OnSFTPProgress traccia i byte trasferiti e la dimensione totale con un flag Cancel per interrompere i trasferimenti. OnSFTPError fornisce codice di errore e messaggio. OnSFTPStatus per gli aggiornamenti di stato. OnSFTPDirectoryList si attiva al completamento dell'elenco delle directory.

Rafforzamento della sicurezza del server

Protezioni opzionali che difendono i componenti server TCP, TLS e HTTP dagli attacchi più comuni. Ogni opzione mantiene per impostazione predefinita il comportamento precedente, quindi le applicazioni esistenti non vengono modificate finché non le abilita.

Verifica del certificato

Il callback di verifica del peer TLS non fallisce più in modalità permissiva. Abiliti TIdSSLOptions.StrictVerify e il risultato della verifica OpenSSL viene applicato, in modo che un callback personalizzato possa solo restringerlo ulteriormente, senza mai accettare un certificato non attendibile.

Rafforzamento del TLS

DisableCompression mitiga CRIME, DisableRenegotiation blocca gli attacchi DoS di rinegoziazione avviati dal client e ServerCipherPreference fa prevalere l'ordine dei cifrari del server nella negoziazione.

Mitigazione di Slowloris

RequestReadTimeout limita il tempo per ricevere una richiesta, mentre il nuovo TIdIOHandler.SetReadDeadline aggiunge una scadenza di lettura totale che neutralizza i client a flusso lento che continuano a reimpostare un semplice timeout di inattività.

Limiti sulla dimensione delle richieste

MaxRequestBodySize limita la Content-Length e il corpo suddiviso in chunk (risponde con 413), MaxHeaderTotalSize limita il totale dei byte di intestazione (risponde con 431) e TIdIOHandler.MaxInputBufferSize limita il buffer di input per fermare le letture che esauriscono la memoria.

Protezione dal request smuggling

StrictRequestParsing rifiuta le richieste ambigue che contengono sia Content-Length sia Transfer-Encoding, oltre alle dimensioni di chunk negative, e il ciclo delle intestazioni del trailer suddiviso in chunk è ora limitato per prevenire un attacco DoS che esaurisce memoria e CPU.

Opzionale e compatibile

Tutto il rafforzamento è opzionale e mantiene per impostazione predefinita il comportamento precedente, senza modifiche che compromettano la compatibilità. Abiliti esattamente le protezioni di cui la sua distribuzione ha bisogno, da Delphi 7 a RAD Studio 13 e Free Pascal.

Aggiorna i tuoi componenti Indy

Scarica gratuitamente sgcIndy e porta il supporto TLS moderno nelle tue applicazioni.