首页 > 解决方案 > 如何使用 CA 签名的服务器证书连接 SSL MQTT 客户端?

问题描述

我需要注册一个 MQTT 地址,但我得到了一个例外。据我所知,我不需要上传任何证书,只需使用服务器的。我应该怎么办?

代码:

public void connect() throws MqttException{
    MqttConnectOptions options = new MqttConnectOptions();
    options.setUserName("username");
    options.setPassword("123456".toCharArray());
    options.setAutomaticReconnect(true);

    client = new MqttClient("ssl://myadress:1883", MqttClient.generateClientId());
    client.setCallback(callback);
    System.out.println(topic);
    try {
        client.connect(options);
        client.subscribe(topic);
    } catch (Exception e){
        e.printStackTrace();
    }
}

例外:

MqttException (0) - javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

我正在使用 Eclipse Paho 库,但我没有在库的文档中找到(或者,如果我找到了,我不明白)任何非常有启发性的东西。

标签: javamqttpaho

解决方案


您需要提供自己的知道信任您的证书的自己的证书SSLSocketFactoryTrustManager

您将 SSLSocketFactory 添加到MqttClientOptions传递给MqttClient.connect()调用的对象。

网上有很多关于使用您自己的 CA 证书设置 SSLSocketFactory 的示例。


推荐阅读