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

如何配置HiveMQ客户端的serverHost、serverPort及sslConfig以SSL连接8883端口?

HiveMQ客户端无法通过SSL连接test.mosquitto.org安全端口问题

问题背景

查阅了相关文档及所有能找到的示例,都没发现HiveMQ客户端通过SSL连接8883端口的简易示例。在Android上用HiveMQ客户端连接test.mosquitto.org的1883非安全端口十分简单,但使用该平台生成的凭证尝试连接8883安全端口时失败,出现如下日志:

MacAddressUtil com.example.tryhive W Failed to find a usable hardware address from the network interfaces; using random bytes: f4:51:aa:f9:c6:c8:9d:fa

客户端创建代码如下(仅遵循简易示例编写):

mqttClient = MqttClient.builder()
    .useMqttVersion3()
    .identifier("MyID")
    .serverHost("test.mosquitto.org")
    .serverPort(8883)
    .sslConfig()
        .keyManagerFactory(managers.kmf)
        .trustManagerFactory(managers.tmf)
    .applySslConfig()
    .buildAsync()

注:用于构建密钥管理器工厂(KeyManagerFactory)和信任管理器工厂(TrustManagerFactory)的凭证,在另一款使用Paho MqttAndroidClient的Android应用中可以成功建立TLS连接——是否需要附上这部分构建代码?

已尝试的错误操作及结果

  • 尝试使用Paho客户端风格的serverHost格式:
    .serverHost("ssl://test.mosquitto.org")
    .serverPort(8883)
    
    此操作导致Netty抛出异常。
  • 首次运行非安全客户端时,误保留了Paho客户端使用的URI格式:
    .serverHost("tcp://test.mosquitto.org")
    .serverPort(1883)
    
    同样连接失败,且出现上述相同的MacAddressUtil日志。

基于以上情况,我怀疑问题并非出在密钥/信任管理器的实现上,希望能获取可用的HiveMQ SSL连接示例代码,或是相关的使用经验。

更新(2022/12/05)

  1. Netty版本排查:怀疑是Netty版本问题,尝试升级到最新版4.1.85.Final,依赖配置如下:

    dependencies {
        implementation 'com.hivemq:hivemq-mqtt-client:1.3.0'
        implementation(platform("io.netty:netty-bom:4.1.85.Final"))
    }
    

    升级后仍无法连接mosquitto的任何安全端口:8883、8884、8885。

  2. WebSocket连接尝试:尝试通过WebSocket接口连接,添加依赖:

    implementation 'com.hivemq:hivemq-mqtt-client-websocket:1.3.0'
    

    客户端构建时添加.webSocketWithDefaultConfig(),可以正常连接mosquitto的8080非安全端口(无需配置sslConfig),但启用SSL后连接8081、8090、8091安全端口均失败。

再次确认:密钥和信任管理器的构建代码与Paho客户端完全一致,且Paho客户端能成功建立安全连接,因此问题应该不在这部分实现上。

内容的提问来源于stack exchange,提问作者Scott Lohr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:45:34