You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Delphi MQTT客户端通过SSL证书安全连接MQTT Broker?

使用pjde/delphi-mqtt实现MQTT SSL连接(带CA证书)

核心配置步骤

  • 确保工程已引入Indy的SSL相关单元(如IdSSLOpenSSL),因为该MQTT组件依赖Indy的SSL处理模块。
  • 通过TMqttClient的OnCreateIOHandler事件配置SSL参数,或者手动创建并关联SSL处理对象。

关键代码示例

procedure TForm1.MqttClient1CreateIOHandler(Sender: TObject; var AIOHandler: TIdIOHandler);
var
  SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  try
    // 指定CA证书路径,用于验证Broker身份
    SSLHandler.SSLOptions.CACertFile := '你的证书文件路径/xxx.crt';
    // 设置SSL版本,推荐使用TLS 1.2或1.3
    SSLHandler.SSLOptions.SSLVersions := [sslvTLSv1_2, sslvTLSv1_3];
    // 开启Broker证书验证,保障连接安全
    SSLHandler.SSLOptions.VerifyMode := [sslvrfPeer];
    SSLHandler.SSLOptions.VerifyDepth := 2;
    AIOHandler := SSLHandler;
  except
    SSLHandler.Free;
    raise;
  end;
end;

连接前的补充配置

  • 将MQTT客户端的Host设为目标全局Broker地址,Port改为SSL专用端口(通常是8883,部分Broker可能使用其他端口)。
  • 保留原有本地连接时的ClientID、Username/Password(若Broker要求身份认证)等配置。

常见问题排查

  • 若连接失败,先检查证书路径是否正确,确保程序有权限读取该文件。
  • 确认Indy对应的OpenSSL库文件(如libcrypto-1_1.dll、libssl-1_1.dll)已放置在程序运行目录,版本需匹配。
  • 仅单向认证(验证Broker)时无需配置客户端证书,若Broker要求双向认证,才需额外设置SSLHandler.SSLOptions.CertFile和SSLHandler.SSLOptions.KeyFile。

内容的提问来源于stack exchange,提问作者Andrew Ivy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:52:05