Delphi TLS 1.3 senza DLL OpenSSL

· Componenti
Delphi TLS 1.3 senza DLL OpenSSL

Ogni sviluppatore Delphi che abbia distribuito TLS conosce la routine. Quale versione di OpenSSL ha questa macchina. Perché il server del cliente ha la 1.1 e la macchina di build ha la 3.0. Quali due DLL vanno accanto all'eseguibile, e cosa succede quando un antivirus ne rimuove una. sgcWebSockets 2026.10 aggiunge una via d'uscita: un motore TLS 1.3 scritto in Object Pascal, dentro la libreria, senza alcuna DLL.

È un'implementazione reale, non un wrapper: l'handshake, il record layer, il key schedule e la validazione dei certificati sono tutti in Pascal. Un client o un server parla TLS senza nulla installato.

Una sola proprietà

oClient := TsgcWebSocketClient.Create(nil);
oClient.URL := 'wss://www.esegece.com:2053';
oClient.TLSOptions.IOHandler := iohNativeTLS;
oClient.Active := True;

Su un server è lo stesso interruttore su SSLOptions:

oServer.SSLOptions.IOHandler := iohNativeTLS;
oServer.SSLOptions.CertFile := 'server.pem';
oServer.SSLOptions.KeyFile := 'server.key';
oServer.SSL := True;

ALPN, S N I e i certificati client ci sono, sull'handler Indy e sui server I O C P e E P O L L. Nient'altro nel tuo codice cambia.

Fidarsi di ciò di cui la macchina già si fida

Un client TLS vale quanto le sue ancore di fiducia, e distribuire un cacert.pem che invecchia male è un problema di manutenzione a sé. Il motore può usare le radici di cui il sistema operativo già si fida:

oClient.TLSOptions.NativeTLS_Options.UseSystemRoots := True;

Su Windows arrivano dallo store di sistema ROOT, su Linux e Android dal primo bundle di certificati trovato tra le posizioni abituali. È disattivato per impostazione predefinita, il che mantiene le ancore di fiducia esattamente a quanto dice RootCertFile.

Post-quantistico, oggi, per via di domani

Un aggressore che oggi non riesce a violare la tua sessione TLS può comunque registrarla e conservarla. La domanda interessante non è se un computer quantistico esista già ora, ma per quanto tempo il tuo traffico resti sensibile. È per questo che TLS si sta spostando verso lo scambio di chiavi ibrido, dove il segreto condiviso è sicuro finché anche solo una delle due metà tiene.

Il motore negozia i gruppi ibridi di RFC 10024, e l'elenco di gruppi predefinito inizia già con quello ibrido:

oClient.TLSOptions.NativeTLS_Options.Groups :=
  'X25519MLKEM768:SecP256r1MLKEM768:X25519';

I tre ibridi sono X25519MLKEM768, SecP256r1MLKEM768 e SecP384r1MLKEM1024. Entrambi gli elenchi usano nomi in stile OpenSSL separati da due punti, e un valore vuoto mantiene i valori predefiniti del motore.

La crittografia che sta sotto

La stessa versione aggiunge al pacchetto sgcCrypto le primitive post-quantistiche stesse, in Object Pascal, senza alcuna libreria esterna:

Sono validati contro i vettori di risposta nota del NIST, che sono distribuiti con la libreria come un insieme di test e non come una semplice affermazione.

Un irrobustimento che non devi chiedere

La stessa revisione ha irrobustito il lato classico contro gli attacchi di temporizzazione. Le operazioni con la chiave privata RSA usano il blinding e un'esponenziazione a tempo costante con verifica del risultato, la moltiplicazione scalare su curva ellittica e la firma Ed25519 vengono eseguite a tempo costante, e AES e GHASH non indicizzano più una tabella con byte segreti. Le chiavi private vengono controllate quando vengono importate, così una chiave che non appartiene al proprio certificato viene rifiutata invece di produrre firme che nessuno può verificare, e una firma la cui codifica ASN.1 non è DER minimo viene ora rifiutata anziché accettata.

Quando usare cosa

OpenSSL e SChannel non spariranno, e per molte applicazioni restano la risposta giusta: OpenSSL se serve interoperabilità TLS 1.2 con qualcosa di vecchio, SChannel se la politica del cliente prevede che sia Windows a possedere la crittografia. Il motore nativo è per il caso in cui il problema è il deployment: un singolo eseguibile, nessuna DLL accanto, lo stesso comportamento su Windows e su Linux, e scambio di chiavi post-quantistico senza aspettare che la piattaforma si aggiorni.

Aggiornamento

Il motore fa parte del pacchetto sgcCrypto ed è selezionato per componente, quindi nulla cambia finché non imposti IOHandler. Una build senza le unit di crittografia solleva un messaggio chiaro invece di fallire in modo oscuro durante l'handshake.

Continua a leggere

Guardalo in video

C'è un breve video su questo sul canale eSeGeCe.

Domande, feedback o aiuto per la migrazione? Mettiti in contatto — riceverai una risposta dalle persone che hanno scritto il codice.