java - 如何使用 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 库,但我没有在库的文档中找到(或者,如果我找到了,我不明白)任何非常有启发性的东西。
解决方案
您需要提供自己的知道信任您的证书的自己的证书SSLSocketFactory
。TrustManager
您将 SSLSocketFactory 添加到MqttClientOptions
传递给MqttClient.connect()
调用的对象。
网上有很多关于使用您自己的 CA 证书设置 SSLSocketFactory 的示例。
推荐阅读
- rest - Liferay 7.0 中返回动态数据列表中所有记录的 API 方法是什么?
- sql - 在 INSERT INTO 语句中直接使用外键值
- java - Play .mp3 and a sequence of notes (MIDI) simultaneously in Java
- reactjs - 在生产环境中使用带有 Express 的 Create-React-App
- ios - TableView 停止重用
- python - Python:“只能将列表(不是“str”)连接到列表”
- python - Django应用程序没有从不同的机器打开
- php - Show total row from current month
- javascript - 从不同的电子表格调用 App 脚本
- ruby-on-rails - 索引页面未呈现但下载 csv