Todo desarrollador Delphi que haya distribuido TLS conoce la rutina. Qué versión de OpenSSL tiene esta máquina. Por qué el servidor del cliente tiene la 1.1 y la máquina de compilación tiene la 3.0. Qué dos DLL van junto al ejecutable, y qué pasa cuando un antivirus elimina una de ellas. sgcWebSockets 2026.10 añade una salida: un motor TLS 1.3 escrito en Object Pascal, dentro de la librería, sin ninguna DLL.
Es una implementación real, no un envoltorio: el handshake, la capa de registros, el key schedule y la validación de certificados son todo Pascal. Un cliente o un servidor habla TLS sin nada instalado.
Una sola propiedad
oClient := TsgcWebSocketClient.Create(nil);
oClient.URL := 'wss://www.esegece.com:2053';
oClient.TLSOptions.IOHandler := iohNativeTLS;
oClient.Active := True;
En un servidor es el mismo interruptor en SSLOptions:
oServer.SSLOptions.IOHandler := iohNativeTLS;
oServer.SSLOptions.CertFile := 'server.pem';
oServer.SSLOptions.KeyFile := 'server.key';
oServer.SSL := True;
ALPN, S N I y los certificados de cliente están ahí, en el handler de Indy y en los servidores I O C P y E P O L L. El resto de tu código no cambia.
Confiar en lo que la máquina ya confía
Un cliente TLS es tan bueno como sus anclas de confianza, y distribuir un cacert.pem que envejece mal es un problema de mantenimiento en sí mismo. El motor puede usar las raíces en las que ya confía el sistema operativo:
oClient.TLSOptions.NativeTLS_Options.UseSystemRoots := True;
En Windows vienen del almacén de sistema ROOT, en Linux y Android del primer paquete de certificados que encuentra entre las ubicaciones habituales. Está desactivado por defecto, lo que mantiene las anclas de confianza exactamente en lo que dice RootCertFile.
Post-cuántico hoy, por el mañana
Un atacante que no puede romper tu sesión TLS hoy aún puede grabarla y guardarla. La pregunta interesante no es si ya existe un ordenador cuántico, es cuánto tiempo sigue siendo sensible tu tráfico. Por eso TLS se está moviendo hacia el intercambio de claves híbrido, donde el secreto compartido es seguro mientras cualquiera de las dos mitades resista.
El motor negocia los grupos híbridos de RFC 10024, y la lista de grupos por defecto ya empieza por el híbrido:
oClient.TLSOptions.NativeTLS_Options.Groups :=
'X25519MLKEM768:SecP256r1MLKEM768:X25519';
Los tres híbridos son X25519MLKEM768, SecP256r1MLKEM768 y SecP384r1MLKEM1024. Ambas listas usan nombres al estilo OpenSSL separados por dos puntos, y un valor vacío mantiene los valores por defecto del motor.
La criptografía que hay debajo
La misma versión añade las propias primitivas post-cuánticas al paquete sgcCrypto, en Object Pascal, sin ninguna librería externa:
- ML-KEM (FIPS 203), ML-DSA (FIPS 204) y SLH-DSA (FIPS 205), con claves leídas y escritas como SubjectPublicKeyInfo, como PKCS#8 en la forma seed, expanded y both, y como PEM, siguiendo RFC 9935, RFC 9881 y RFC 9909.
- X-Wing, la encapsulación de claves híbrida que combina X25519 con ML-KEM-768.
- Certificados X.509 y solicitudes de certificado con claves post-cuánticas, incluida la emisión desde una autoridad de certificación post-cuántica.
- JWT firmados y verificados con ML-DSA-44, ML-DSA-65 y ML-DSA-87, los algoritmos de RFC 9964.
Se validan contra los vectores de respuesta conocida del NIST, que se distribuyen con la librería como un conjunto de pruebas y no como una simple afirmación.
Un endurecimiento que no tienes que pedir
La misma revisión endureció el lado clásico frente a ataques de temporización. Las operaciones con la clave privada RSA usan blinding y una exponenciación en tiempo constante con verificación del resultado, la multiplicación escalar de curva elíptica y la firma Ed25519 se ejecutan en tiempo constante, y AES y GHASH ya no indexan una tabla con bytes secretos. Las claves privadas se comprueban al importarlas, así que una clave que no pertenece a su certificado se rechaza en lugar de producir firmas que nadie puede verificar, y una firma cuya codificación ASN.1 no es DER mínimo ahora se rechaza en lugar de aceptarse.
Cuándo usar cuál
OpenSSL y SChannel no van a desaparecer, y para muchas aplicaciones siguen siendo la respuesta correcta: OpenSSL si necesitas interoperabilidad con TLS 1.2 con algo antiguo, SChannel si la política del cliente es que Windows es dueño de la criptografía. El motor nativo es para el caso en que el despliegue es el problema: un único ejecutable, sin ninguna DLL al lado, el mismo comportamiento en Windows y en Linux, e intercambio de claves post-cuántico sin esperar a que la plataforma se ponga al día.
Actualización
El motor forma parte del paquete sgcCrypto y se selecciona por componente, así que nada cambia hasta que fijas IOHandler. Una compilación sin las unidades de criptografía lanza un mensaje claro en lugar de fallar de forma oscura en el handshake.
Sigue leyendo
- Una página CRUD web en Delphi en cinco minutos
- Pregúntale algo a tu grid de Delphi en lenguaje sencillo
- sgcWebSockets 2026.10, todo lo demás de esta versión
Míralo en vídeo
Hay un vídeo breve de esto en el canal de eSeGeCe.
¿Preguntas, comentarios o ayuda con la migración? Ponte en contacto — recibirás respuesta de las mismas personas que escribieron el código.
