如何让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
相关产品推荐
相关产品推荐

