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.
