DTLS sobre UDP nos componentes Servidor e Cliente

· Recursos

A partir do sgcWebSockets 2022.8.0, DTLS sobre UDP é suportado pelos componentes UDP Servidor e Cliente. Isso significa que agora você pode enviar mensagens criptografadas usando UDP (como o protocolo WebSocket ou HTTP que trabalham sobre TLS).

Da Wikipedia: Datagram Transport Layer Security (DTLS) é um protocolo de comunicações que fornece segurança a aplicações baseadas em datagramas, permitindo que elas se comuniquem de uma forma projetada[1][2] para evitar escuta, adulteração ou falsificação de mensagens. O protocolo DTLS é baseado no protocolo Transport Layer Security (TLS), orientado a stream, e visa fornecer garantias de segurança semelhantes.


Configuração 

A configuração é muito semelhante à de outros componentes. Há uma nova propriedade chamada DTLSOptions onde você pode configurar as opções de DTLS como arquivo de certificado, chave privada, verificação de certificado... Para habilitar o DTLS basta definir a propriedade DTLS como True antes de o servidor iniciar ou antes de enviar uma mensagem de um cliente para o servidor.

O certificado deve estar em formato PEM, então se o certificado tiver formato diferente, primeiro converta para PEM.

O DTLS requer openSSL 1.1+, então a versão padrão do Indy que vem com o Rad Studio atualmente não suporta isso. Apenas a versão Enterprise do sgcWebSockets suporta DTLS (porque essa versão vem com uma versão customizada do indy que suporta openSSL 1.1 e 3.0).

Servidor 

  // ... servidor
  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 

    // ... cliente
    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

Veja abaixo um link para um demo de DTLS sobre UDP que mostra como funciona no windows usando a biblioteca sgcWebSockets.