# mqtt tls 自簽機制 ## 環境 CA:raspberry pi broker:raspberry pi client:ubuntu ## 產生簽證 client(publisher or subscriber)在嘗試連線broker時使用的憑證可以使用以下憑證連線broker。 1. client端產生csr後給CA的憑證簽名產生的憑證 2. server端產生csr後給CA的憑證簽名產生的憑證 步驟: 1. 製造CA的key ```bash= # 使用rsa非對稱式加密產生私鑰並用des3對私鑰加密 openssl genrsa -des3 -out ca.key 2048 ``` 2. 製造CA的憑證 ```bash= # 使用ca.key去產生一個CA憑證。並且此憑證具備以下特性: # 1. 憑這格視為X509 # 2. 期限為1833天 openssl req -new -x509 -days 1833 -key ca.key -out ca.crt # req 是用來產生憑證或憑證需求的 ``` 3. 製造broker的key ```bash= openssl genrsa -des3 -out server.key 2048 ``` 4. 使用broker的私鑰匙生產broker的憑證簽屬需求 ```bash= openssl req -new -key server.key -out server.csr ``` 5. 使用CA的憑證簽屬broker的憑證需求,且此簽屬的憑證有效期限為365天 ```bash= openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 -out server.crt ``` ## 設定broker的mosquitto.conf 需要文件: 1. CA的憑證 2. broker的憑證 3. broker的金鑰 ```bash= listener 1883 listener 1884 allow_anonymous true cafile file to cafile(ca.crt) keyfile file to broker key(server.key) certfile file to broker certification(server.crt) tls_version tlsv_1.2 ``` ## 執行新的tls_v2的mqtt broker ```bash= mosquitto -c /etc/mosquitto/mqtt_tls_v2.conf -v ``` note:需記得將原先預設的1883服務關閉 ```bash= /etc/init.d/mosquitto stop ``` ## publisher 或是 subscriber使用 ### Linux ```bash //訂閱主題 mosquitto_sub -p PORT --cafile server.crt -h HOST_NAME -t TITLE --insecure //發送主題 mosquitto_pub -p PORT --cafile server.crt -h HOST_NAME -t TITLE -m MESSAGE --insecure ``` ### mqtt spy(Windows) 憑證用server.crt。tls版本設定為tlsv1.2 參考資料: [Use TLS-SSL with Mosquitto Mqtt Broker](https://www.youtube.com/watch?v=1Tu0tc0VHuc) ###### tags: `mqtt` `linux`