MQTT.fx无法连接到AWS IoTMqttException

问题描述

我正在尝试遵循本教程https://circuitdigest.com/tutorial/getting-started-with-amazon-aws-for-iot-projects

我一次又一次地完成了所有步骤,但是当单击MQTT.fx中的“连接”按钮时,我无法摆脱MqttException错误

我从AWS IoT下载证书并将其保存在C:\ temp文件夹中。我还检查了MQTT.fx中的日志选项卡,您可以在下面看到它。您对解决方法有任何想法吗?

非常感谢!

2020-10-09 10:40:28,043错误--- MqttFX ClientModel: 请验证您的设置(例如,经纪人地址,经纪人港口和客户 ID)和用户凭据! org.eclipse.paho.client.mqttv3.MqttException:MqttException位于 org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38) 〜[org.eclipse.paho.client.mqttv3-1.2.0.jar :?]在 org.eclipse.paho.client.mqttv3.internal.ClientComms $ ConnectBG.run(ClientComms.java:715) 〜[org.eclipse.paho.client.mqttv3-1.2.0.jar :?]在 java.util.concurrent.Executors $ RunnableAdapter.call(未知源) 〜[?:1.8.0_162]在java.util.concurrent.FutureTask.run(未知来源) 〜[?:1.8.0_162]在 java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201(未知 来源)〜[?:1.8.0_162]在 java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(未知 来源)〜[?:1.8.0_162]在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) [?:1.8.0_162]在 java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知源) java.lang.Thread.run上的[?:1.8.0_162](未知来源)[?: 1.8.0_162] 引起原因:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 在以下位置找到到所需目标的有效认证路径 sun.security.ssl.Alerts.getSSLException(未知来源)〜[?:1.8.0_162] 在sun.security.ssl.SSLSocketImpl.fatal(未知来源) 〜[?:1.8.0_162]在sun.security.ssl.Handshaker.fatalSE(未知来源) 〜[?:1.8.0_162]在sun.security.ssl.Handshaker.fatalSE(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.ClientHandshaker.serverCertificate(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.ClientHandshaker.processMessage(未知来源) 〜[?:1.8.0_162]在sun.security.ssl.Handshaker.processLoop(未知 来源)〜[?:1.8.0_162]在 sun.security.ssl.Handshaker.process_record(未知来源) 〜[?:1.8.0_162]在sun.security.ssl.SSLSocketImpl.readRecord(未知 来源)〜[?:1.8.0_162]在 sun.security.ssl.SSLSocketImpl.performInitialHandshake(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.SSLSocketImpl.startHandshake(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.SSLSocketImpl.startHandshake(未知来源) 〜[?:1.8.0_162]在 org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:108) 〜[org.eclipse.paho.client.mqttv3-1.2.0.jar :?]在 org.eclipse.paho.client.mqttv3.internal.ClientComms $ ConnectBG.run(ClientComms.java:701) 〜[org.eclipse.paho.client.mqttv3-1.2.0.jar :?] ...另外7个原因: sun.security.validator.ValidatorException:PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 在以下位置找到到所需目标的有效认证路径 sun.security.validator.PKIXValidator.dobuild(未知来源) 〜[?:1.8.0_162]在 sun.security.validator.PKIXValidator.engineValidate(未知来源) 〜[?:1.8.0_162]在sun.security.validator.Validator.validate(未知 来源)〜[?:1.8.0_162]在 sun.security.ssl.x509trustmanagerImpl.validate(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.x509trustmanagerImpl.checkTrusted(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.x509trustmanagerImpl.checkServerTrusted(未知 来源)〜[?:1.8.0_162]在 sun.security.ssl.ClientHandshaker.serverCertificate(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.ClientHandshaker.processMessage(未知来源) 〜[?:1.8.0_162]在sun.security.ssl.Handshaker.processLoop(未知 来源)〜[?:1.8.0_162]在 sun.security.ssl.Handshaker.process_record(未知来源) 〜[?:1.8.0_162]在sun.security.ssl.SSLSocketImpl.readRecord(未知 来源)〜[?:1.8.0_162]在 sun.security.ssl.SSLSocketImpl.performInitialHandshake(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.SSLSocketImpl.startHandshake(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.SSLSocketImpl.startHandshake(未知来源) 〜[?:1.8.0_162]在 org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:108) 〜[org.eclipse.paho.client.mqttv3-1.2.0.jar :?]在 org.eclipse.paho.client.mqttv3.internal.ClientComms $ ConnectBG.run(ClientComms.java:701) 〜[org.eclipse.paho.client.mqttv3-1.2.0.jar :?] ...另外7个原因: sun.security.provider.certpath.SunCertPathBuilderException:无法 在以下位置找到到所需目标的有效认证路径 sun.security.provider.certpath.SunCertPathBuilder.build(未知 来源)〜[?:1.8.0_162]在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(未知 来源)〜[?:1.8.0_162]在 java.security.cert.CertPathBuilder.build(未知源) 〜[?:1.8.0_162]在 sun.security.validator.PKIXValidator.dobuild(未知来源) 〜[?:1.8.0_162]在 sun.security.validator.PKIXValidator.engineValidate(未知来源) 〜[?:1.8.0_162]在sun.security.validator.Validator.validate(未知 来源)〜[?:1.8.0_162]在 sun.security.ssl.x509trustmanagerImpl.validate(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.x509trustmanagerImpl.checkTrusted(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.x509trustmanagerImpl.checkServerTrusted(未知 来源)〜[?:1.8.0_162]在 sun.security.ssl.ClientHandshaker.serverCertificate(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.ClientHandshaker.processMessage(未知来源) 〜[?:1.8.0_162]在sun.security.ssl.Handshaker.processLoop(未知 来源)〜[?:1.8.0_162]在 sun.security.ssl.Handshaker.process_record(未知来源) 〜[?:1.8.0_162]在sun.security.ssl.SSLSocketImpl.readRecord(未知 来源)〜[?:1.8.0_162]在 sun.security.ssl.SSLSocketImpl.performInitialHandshake(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.SSLSocketImpl.startHandshake(未知来源) 〜[?:1.8.0_162]在 sun.security.ssl.SSLSocketImpl.startHandshake(未知来源) 〜[?:1.8.0_162]在 org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:108) 〜[org.eclipse.paho.client.mqttv3-1.2.0.jar :?]在 org.eclipse.paho.client.mqttv3.internal.ClientComms $ ConnectBG.run(ClientComms.java:701) 〜[org.eclipse.paho.client.mqttv3-1.2.0.jar :?] ...还有7个2020-10-09 10:40:28,045信息--- ScriptsController:清除控制台。 2020-10-09 10:40:28,046错误--- brokerConnectService: MqttException

解决方法

我解决了我的问题。 这是关于下载错误的证书。您可以在此处找到详细的解决方案。

在AWS IoT中创建事物后,下载所有3个证书。

如果要获取MQTT.fx必需的CA证书,则需要转到here(创建事物后,您将在AWS IoT的下载证书部分下看到此链接),然后单击 RSA 2048位密钥:Amazon Root CA 1 链接。新标签页将打开。

将此证书复制并粘贴到您的记事本中。将其命名为Amazon_Root_CA_1.pem,然后在保存时选择所有文件类型。

将所有证书放在一个文件中。我将它们放在C:\ temp文件夹下。

最后,这就是我的配置:MQTT.fx configuration

现在MQTT.fx有望运行:)