DTLS sur UDP dans les composants serveur et client

· Fonctionnalités

Depuis sgcWebSockets 2022.8.0, DTLS sur UDP est pris en charge par les composants UDP serveur et client. Cela signifie que tu peux désormais envoyer des messages chiffrés via UDP (comme les protocoles WebSocket ou HTTP qui fonctionnent sur TLS).

Selon Wikipedia : Datagram Transport Layer Security (DTLS) est un protocole de communication qui apporte de la sécurité aux applications basées sur des datagrammes en leur permettant de communiquer d'une manière conçue[1][2] pour empêcher l'écoute clandestine, l'altération ou la contrefaçon de messages. Le protocole DTLS est basé sur le protocole orienté flux Transport Layer Security (TLS) et vise à fournir des garanties de sécurité similaires.


Configuration 

La configuration est très similaire à celle des autres composants. Il existe une nouvelle propriété appelée DTLSOptions où tu peux configurer les options DTLS comme le fichier de certificat, la clé privée, la vérification de certificat... Pour activer DTLS, définis simplement la propriété DTLS à True avant que le serveur ne démarre ou avant d'envoyer un message d'un client à un serveur.

Le certificat doit être au format PEM, donc si le certificat a un format différent, convertis-le d'abord en PEM.

DTLS nécessite openSSL 1.1+, donc la version Indy par défaut fournie avec Rad Studio ne le prend actuellement pas en charge. Seule la version Enterprise de sgcWebSockets prend en charge DTLS (parce que cette version est livrée avec une version Indy personnalisée qui prend en charge openSSL 1.1 et 3.0).

Serveur 

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

Client 

    // ... 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!!!'); 

Démo

Voici un lien vers une démo DTLS sur UDP qui montre comment cela fonctionne sous Windows avec la bibliothèque sgcWebSockets.