【问题标题】:IBM watson internet of things platform: Connecting using mosquitto clientIBM watson 物联网平台:使用 mosquitto 客户端连接
【发布时间】:2020-11-30 11:56:47
【问题描述】:

我在 Watson IoT 中创建了我的设备,我看到它已连接并发送一些事件(我在 watson iot 仪表板中看到它)

我是这样定义的

  • 设备 ID 1002
  • 设备类型semaforo

所以我使用以下信息创建我的应用程序

  • a-MyOrg-tecfj072yx
  • 描述基础
  • AccessControl 权限标准应用程序
  • 键:a-MyOrg-tecfj072yx
  • 令牌:ATokenPsw

我尝试使用 mosquitto 代码连接到设备事件

mosquitto_sub -h MyOrg.messaging.internetofthings.ibmcloud.com -p 8883 -i a:MyOrg:myapp -u a-MyOrg-tecfj072yx -P ATokenPsw -t iot-2/type/+/id/+/cmd/+/fmt/+

什么都没有!没有显示错误,没有检索到事件!!! mosquitto_sub 保持原样

为什么例程没有正确订阅我的设备事件?

【问题讨论】:

  • -d 添加到命令行参数以启用调试输出。此外,您还需要使用有效值传递 -cafile-capath 以启用 TLS/SSL

标签: mqtt ibm-watson mosquitto watson-iot


【解决方案1】:

要使用端口 8883,您需要建立 TLS 连接。 mosquitto_sub 需要 --cafile--capath 出现在命令行上才能启用 TLS 连接。

摘自man page

要在使用 x509 证书时启用 TLS 连接,必须提供 --cafile 或 --capath 之一作为选项。

--cafile

定义包含 PEM 编码 CA 证书的文件的路径 被信任。用于启用 SSL 通信。另见--capath

--capath

定义包含 PEM 编码 CA 证书的目录的路径 是值得信赖的。用于启用 SSL 通信。对于 --capath 到 正常工作,证书文件必须有“.crt”作为文件 结束,你必须每次运行“openssl rehash” 您添加/删除证书。

【讨论】:

    【解决方案2】:

    谢谢。 你的信息帮我解决了……但这次旅行并不容易

    这是解决连接的所有步骤
    1-使用正确的信息(国家、州、城市等)创建根 CA 证书

    openssl genrsa -aes256 -passout pass:password123 -out rootCA_key.pem 2048
    openssl req -new -sha256 -x509 -days 3560 -subj "/C=IT/ST=Itali/L=Milano/O=MyOrg/OU=MyOrg Corporate/CN=MyOrg Root CA" -extensions v3_ca -set_serial 1 -passin pass:password123 -key rootCA_key.pem -out rootCA_certificate.pem -config ext.cfg
    

    2-上传根CA证书到物联网平台
    您需要使用控制台将根 CA 证书加载到 IoT 平台。在设置部分转到安全部分的 CA 证书。选择添加证书然后选择刚刚生成的rootCA_certificate.pem文件上传到平台,然后按保存

    3-使用您的正确信息(国家、州、城市等)生成 MQTT 服务器的密钥和证书,并且 CN 必须与您的 IotServer 相同(MyOrg.messaging .....)

    openssl genrsa -aes256 -passout pass:password123 -out mqttServer_key.pem 2048
    openssl req -new -sha256 -subj "/C=IT/ST=Itali/L=Milano/O=MyOrg/OU=MyOrg Corporate/CN=MyOrg.messaging.internetofthings.ibmcloud.com" -passin pass:password123 -key mqttServer_key.pem -out mqttServer_crt.csr
    


    4-将服务器证书添加到物联网平台 在安全性下的 Messaging Server Certificates 部分中的控制台的设置部分中进入 IoT 平台。选择添加证书,然后上传证书 (mqttServer_crt.pem) 和私钥 (mqttServer_key.pem)。您还需要提供密码 (password123)。
    5-使用openssl测试服务器证书:

    openssl s_client -CAfile mqttServer_crt.pem -showcerts -state  -servername MyOrg.messaging.internetofthings.ibmcloud.com -connect MyOrg.messaging.internetofthings.ibmcloud.com:8883
    


    6- 下载 PEM 格式的证书,该证书可以轻松导入到信任库并将 ii 放入 MyOrg.messaging.internetofthings.ibmcloud.com.pem

    echo | openssl s_client -connect MyOrg.messaging.internetofthings.ibmcloud.com:8883 -showcerts 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > MyOrg.messaging.internetofthings.ibmcloud.com.pem
    

    7-现在你可以用成

    mosquitto_sub -h MyOrg.messaging.internetofthings.ibmcloud.com -p 8883 -i a:MyOrg:myapp -u MyOrgAppKey -P MyOrgToken -t iot-2/type/+/id/+/evt/+/fmt/+ -d --cafile MyOrg.messaging.internetofthings.ibmcloud.com.pem 
    

    为了完成这里的信息是一些可以帮助我的教程

    developer.ibm.com

    ibm.com support

    github including srvext.cfg,ext.cfg files

    【讨论】: