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

How to connect a SSL MQTT client with a CA signed server certificate?

我需要注册一个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 库,但我没有在该库的文档中找到(或者,如果我找到了,我也不理解)任何非常有启发性的内容。

您需要提供自己的 SSLSocketFactory,它拥有自己的 TrustManager,知道信任您的证书。

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

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