我需要注册一个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库,但在库的文档中没有发现(或者,如果我听不懂的话)很有启发性的东西。
答案 0 :(得分:1)
您需要提供自己的SSLSocketFactory
,它自己的TrustManager
会信任您的证书。
您将SSLSocketFactory添加到传递到MqttClientOptions
调用的MqttClient.connect()
对象中。
在线上有很多关于使用您自己的CA证书设置SSLSocketFactory的示例。