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:
- ML-KEM (FIPS 203), ML-DSA (FIPS 204) e SLH-DSA (FIPS 205), con chiavi lette e scritte come SubjectPublicKeyInfo, come PKCS#8 nella forma seed, expanded e both, e come PEM, seguendo RFC 9935, RFC 9881 e RFC 9909.
- X-Wing, l'incapsulamento di chiave ibrido che accoppia X25519 con ML-KEM-768.
- Certificati X.509 e richieste di certificato con chiavi post-quantistiche, inclusa l'emissione da parte di un'autorità di certificazione post-quantistica.
- JWT firmati e verificati con ML-DSA-44, ML-DSA-65 e ML-DSA-87, gli algoritmi di RFC 9964.
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
- Una pagina web CRUD in Delphi in cinque minuti
- Fai una domanda alla tua grid Delphi in inglese semplice
- sgcWebSockets 2026.10, tutto il resto di questa versione
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.
