如何将SSL MQTT客户端与CA签名的服务器证书连接?

时间:2018-11-28 15:42:48

标签: java mqtt paho

我需要注册一个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库,但在库的文档中没有发现(或者,如果我听不懂的话)很有启发性的东西。

1 个答案:

答案 0 :(得分:1)

您需要提供自己的SSLSocketFactory,它自己的TrustManager会信任您的证书。

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

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