Как подключить клиент SSL MQTT с сертификатом сервера, подписанным центром сертификации? - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно подписаться на адрес 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 голосов
/ 28 ноября 2018

Вам нужно предоставить свой собственный SSLSocketFactory, который имеет собственный TrustManager, который знает, как доверять вашему сертификату.

Вы добавляете SSLSocketFactory к объекту MqttClientOptions, который передается в вызов MqttClient.connect().

В Интернете есть множество примеров настройки SSLSocketFactory с собственными сертификатами CA.

...