Delphi TLS 1.3 zonder OpenSSL-DLL's

· Componenten
Delphi TLS 1.3 zonder OpenSSL-DLL's

Elke Delphi-ontwikkelaar die ooit TLS heeft uitgeleverd, kent de routine. Welke OpenSSL-versie deze machine heeft. Waarom de server van de klant 1.1 heeft en de buildmachine 3.0. Welke twee DLL's naast het uitvoerbare bestand horen, en wat er gebeurt als een antivirusprogramma er een verwijdert. sgcWebSockets 2026.10 biedt een uitweg: een in Object Pascal geschreven TLS 1.3-engine, binnen de library, zonder enige DLL.

Het is een echte implementatie, geen wrapper: de handshake, de recordlaag, de key schedule en de certificaatvalidatie zijn allemaal Pascal. Een client of een server spreekt TLS zonder dat er iets geïnstalleerd is.

Eén eigenschap

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

Op een server is het dezelfde schakelaar bij SSLOptions:

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

ALPN, S N I en clientcertificaten zijn aanwezig, op de Indy-handler en op de I O C P- en E P O L L-servers. Verder verandert er niets aan je code.

Vertrouwen op wat de machine al vertrouwt

Een TLS-client is maar zo goed als zijn vertrouwensankers, en het uitleveren van een cacert.pem die slecht veroudert, is een eigen onderhoudsprobleem. De engine kan de root-certificaten gebruiken die het besturingssysteem al vertrouwt:

oClient.TLSOptions.NativeTLS_Options.UseSystemRoots := True;

Op Windows komen ze uit de ROOT-systeemopslag, op Linux en Android uit de eerste certificaatbundel die op de gebruikelijke locaties wordt gevonden. Standaard staat dit uit, waardoor de vertrouwensankers precies blijven wat RootCertFile zegt.

Post-kwantum, vandaag, vanwege morgen

Een aanvaller die je TLS-sessie vandaag niet kan breken, kan hem nog steeds opnemen en bewaren. De interessante vraag is niet of er nu al een kwantumcomputer bestaat, maar hoe lang je verkeer gevoelig blijft. Daarom beweegt TLS zich naar hybride sleuteluitwisseling, waarbij het gedeelde geheim veilig is zolang een van beide helften standhoudt.

De engine onderhandelt de hybride groepen van RFC 10024, en de standaardgroepenlijst begint al met de hybride:

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

De drie hybrides zijn X25519MLKEM768, SecP256r1MLKEM768 en SecP384r1MLKEM1024. Beide lijsten gebruiken namen in OpenSSL-stijl, gescheiden door dubbele punten, en een lege waarde behoudt de standaardwaarden van de engine.

De cryptografie eronder

Dezelfde release voegt de post-kwantumprimitieven zelf toe aan het sgcCrypto-pack, in Object Pascal, zonder externe library:

Ze worden gevalideerd tegen de bekende NIST-antwoordvectoren, die met de library worden meegeleverd als een testset in plaats van als een bewering.

Verharding waar je niet om hoeft te vragen

Dezelfde ronde verhardde de klassieke kant tegen timing-aanvallen. Bewerkingen met de private RSA-sleutel gebruiken blinding en een tijdconstante exponentiatie met controle van het resultaat, scalaire vermenigvuldiging op elliptische krommen en Ed25519-ondertekening lopen tijdconstant, en AES en GHASH indexeren niet langer een tabel met geheime bytes. Private sleutels worden gecontroleerd bij het importeren, zodat een sleutel die niet bij zijn certificaat hoort wordt geweigerd in plaats van handtekeningen te produceren die niemand kan verifiëren, en een handtekening waarvan de ASN.1-codering geen minimale DER is, wordt nu afgewezen in plaats van geaccepteerd.

Wanneer welke te gebruiken

OpenSSL en SChannel gaan nergens heen, en voor veel toepassingen blijven ze het juiste antwoord: OpenSSL als je TLS 1.2-interoperabiliteit met iets ouds nodig hebt, SChannel als het beleid van de klant is dat Windows de cryptografie beheert. De native engine is voor het geval waarin de implementatie het probleem is: één uitvoerbaar bestand, geen DLL ernaast, hetzelfde gedrag op Windows en op Linux, en post-kwantum sleuteluitwisseling zonder te wachten tot het platform bijtrekt.

Upgraden

De engine maakt deel uit van het sgcCrypto-pack en wordt per component geselecteerd, dus er verandert niets totdat je IOHandler instelt. Een build zonder de crypto-units geeft een duidelijke melding in plaats van op onduidelijke wijze te falen bij de handshake.

Lees verder

Bekijk het

Er is een korte video hierover op het eSeGeCe-kanaal.

Vragen, feedback of hulp bij migratie? Neem contact op — je krijgt antwoord van de mensen die de code hebben geschreven.