DTLS sobre UDP en componentes servidor y cliente

· Características

A partir de sgcWebSockets 2022.8.0 los componentes UDP de servidor y cliente admiten DTLS sobre UDP. Esto significa que ya puedes enviar mensajes cifrados usando UDP (igual que los protocolos WebSocket o HTTP funcionan sobre TLS).

De Wikipedia: Datagram Transport Layer Security (DTLS) es un protocolo de comunicaciones que aporta seguridad a las aplicaciones basadas en datagramas permitiéndoles comunicarse de una forma diseñada[1][2] para evitar la escucha, la manipulación o la falsificación de mensajes. El protocolo DTLS se basa en el protocolo Transport Layer Security (TLS), orientado a stream, y pretende ofrecer garantías de seguridad similares.


Configuración 

La configuración es muy similar a la de otros componentes. Hay una nueva propiedad llamada DTLSOptions donde puedes configurar las opciones DTLS como el certificado, la clave privada, la verificación del certificado... Para habilitar DTLS basta con poner la propiedad DTLS a True antes de arrancar el servidor o antes de enviar un mensaje desde un cliente al servidor.

El certificado debe estar en formato PEM, así que si el certificado tiene otro formato, conviértelo antes a PEM.

DTLS requiere OpenSSL 1.1+, así que la versión de Indy por defecto que viene con  RAD Studio actualmente no lo soporta. Sólo la versión Enterprise de sgcWebSockets admite DTLS (porque incluye una versión personalizada de Indy compatible con OpenSSL 1.1 y 3.0).

Servidor 

  // ... server
  server := TsgcUDPServer.Create(nil);
  server.Port := StrToInt(txtDefaultPort.Text);
  server.Bindings.Clear;
  With server.Bindings.Add do
  begin
    IP := '127.0.0.1';
    Port := 5430;
  end;
  // ... dtls
  server.DTLS := True;
  server.DTLSOptions.CertFile := 'certificate.pem';
  server.DTLSOptions.KeyFile := 'privatekey.pem';
  // ... active
  server.Active := True; 

Cliente 

    // ... client
    client.Host := '127.0.0.1';
    client.Port := 5430;
    client.DTLS := True;
    client.DTLSOptions.CertFile := 'certificate.pem';
    client.DTLSOptions.KeyFile := 'privatekey.pem';
    client.WriteData('Hello from sgcWebSockets!!!'); 

Demo

A continuación tienes un enlace a una demo de DTLS sobre UDP que muestra cómo funciona en Windows usando la librería sgcWebSockets.