服务器和客户端组件中的 DTLS over UDP

· 功能

sgcWebSockets 2022.8.0 起,服务器和客户端 UDP 组件支持 DTLS over UDP。这意味着您现在可以使用 UDP 发送加密消息(就像基于 TLS 运行的 WebSocket 或 HTTP 协议一样)。

维基百科介绍:数据报传输层安全(DTLS)是一种通信协议,通过允许数据报应用以防窃听、防篡改、防消息伪造的方式通信来为其提供安全保障。DTLS 协议基于面向流的传输层安全(TLS)协议,旨在提供类似的安全保障。


配置

配置方式与其他组件非常相似。新增了一个名为 DTLSOptions 的属性,您可以在此配置 DTLS 选项,例如证书文件、私钥、证书验证等。要启用 DTLS,只需在服务器启动前或客户端向服务器发送消息前将 DTLS 属性设置为 True。

证书必须为 PEM 格式,如果证书为其他格式,请先转换为 PEM。

DTLS 需要 OpenSSL 1.1+,因此 Rad Studio 当前自带的默认 Indy 版本不支持。仅 sgcWebSockets 企业版支持 DTLS(因为该版本附带支持 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!!!');

演示

以下链接提供 DTLS over UDP 演示,展示如何在 Windows 上使用 sgcWebSockets 库实现该功能。