サーバー / クライアントコンポーネントでの DTLS over UDP

· 機能

sgcWebSockets 2022.8.0 より、サーバーおよびクライアント UDP コンポーネントで DTLS over UDP がサポートされました。これにより、UDP を使用して暗号化されたメッセージを送信できるようになりました(TLS 上で動作する WebSocket や HTTP プロトコルと同様です)。

Wikipedia より: Datagram Transport Layer Security(DTLS)は、データグラムベースのアプリケーションにセキュリティを提供する通信プロトコルです。盗聴、改ざん、メッセージの偽造を防ぐよう設計された方式でアプリケーションが通信できるようにします。DTLS プロトコルはストリーム指向の Transport Layer Security(TLS)プロトコルをベースとしており、同様のセキュリティ保証を提供することを目的としています。


設定

設定は他のコンポーネントと非常によく似ています。DTLSOptions という新しいプロパティで、ファイル証明書、秘密鍵、証明書の検証などの DTLS オプションを設定できます。DTLS を有効にするには、サーバーの起動前またはクライアントからサーバーへのメッセージ送信前に DTLS プロパティを True に設定してください。

証明書は PEM 形式である必要があります。異なる形式の場合は、まず PEM に変換してください。

DTLS は openSSL 1.1 以降を必要とします。そのため、Rad Studio に付属するデフォルトの Indy バージョンは現時点でサポートしていません。DTLS をサポートするのは sgcWebSockets Enterprise バージョンのみです(このバージョンには openSSL 1.1 および 3.0 をサポートするカスタム Indy バージョンが含まれています)。

サーバー

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

デモ

sgcWebSockets ライブラリを使用して Windows 上での動作を示す DTLS over UDP デモへのリンクを以下に掲載します。