在當前物聯網(IoT)的應用環境中,資料傳輸的安全性早已從「選配」轉變為「標配」。MQTT 協定雖以輕量、高效著稱,但在預設狀態下其封包是以明文形式傳遞,這意味著身分憑證與感測器數據極易受到中間人攻擊的威脅。為了確保通訊的安全與完整性,導入 TLS(傳輸層安全性協定)加密機制是目前公認的最佳解決方案。透過建立私有的憑證授權單位(CA),我們能為 Broker(伺服器)與 Client(客戶端)簽發專屬的身分證明,從而在通訊雙方之間建立起一道堅實的信任門檻。這不僅能防止數據被非法竊聽,還能透過雙向認證機制,確保只有經過授權的設備才能接入您的物聯網系統,為整體的開發環境構築第一道安全防線。
要在 Windows 系統環境下實現自動化憑證生成,首要步驟是配置核心工具 OpenSSL。由於 Windows 原生並不包含此工具,使用者需要前往第三方下載頁面下載 Win32/Win64 OpenSSL 軟體包,建議選擇 Win64 OpenSSL 的穩定版本進行安裝。安裝完成後,還有一項至關重要的步驟,那就是將 OpenSSL 的執行檔路徑手動加入到系統的環境變數中。通常預設的安裝路徑位於 C:\Program Files\OpenSSL-Win64\bin,將此路徑新增至使用者的 PATH 變數後,您便能在任何命令提示字元視窗中直接呼叫 openssl 指令。這一項前置作業是確保後續 Batch 腳本能正常運作的基礎,能避免因找不到執行檔而導致的指令失效問題。

當開發環境準備就緒,我們即可透過這支精心設計的 Windows Batch 腳本來簡化繁瑣的憑證簽發流程。這支腳本採用了一鍵式設計,執行後會自動建立存放目錄,並依序完成建立私有 CA 根憑證、生成伺服器私鑰與簽署請求、以及簽發客戶端證書等一系列複雜動作。在腳本運作過程中,它會自動將所有 CSR 請求檔案清理乾淨,僅留下最終佈署所需的關鍵檔案。以下表格詳列了執行完成後所產生的各項檔案及其在 MQTT 通訊中的具體定位與用途,讓開發者能更直觀地掌握證書分配原則:
| 檔案名稱 | 用途描述 | 部署對象 |
|---|---|---|
| ca.crt | 私有根憑證,作為信任連鎖的源頭,用於驗證雙方身分。 | Broker & Client |
| server.crt / server.key | Broker 端的身分證書與對應私鑰,用於建立 TLS 加密監聽埠。 | MQTT Broker |
| client.crt / client.key | 客戶端身分證明與私鑰,在啟動 M-TLS 雙向認證時為必備檔案。 | MQTT Client |
將生成的檔案正確佈署至 Mosquitto 等 Broker 軟體後,您的物聯網架構將具備工業級的安全強度。對於開發者而言,這種「私有 PKI」的模式雖然在首次建置時需要一些前置成本,但它不僅完全免費,更能讓您在不受限於第三方憑證授權單位的情況下,自由管控所有設備的接入權限。
自動化生成腳本:generate_certs.bat
@echo off
echo ==============================
echo Mosquitto TLS Certificate Tool
echo ==============================
mkdir certs
cd certs
echo.
echo ===== Creating CA =====
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=MQTT-CA"
echo.
echo ===== Generating Server Key =====
openssl genrsa -out server.key 2048
echo ===== Generating Server CSR =====
openssl req -new -key server.key -out server.csr -subj "/CN=mosquitto-server"
echo ===== Signing Server Certificate with CA =====
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650
echo.
echo ===== Generating Client Key =====
openssl genrsa -out client.key 2048
echo ===== Generating Client CSR =====
openssl req -new -key client.key -out client.csr -subj "/CN=mqtt-client"
echo ===== Signing Client Certificate with CA =====
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650
echo.
echo ===== Cleaning Up Temporary Files =====
del *.csr
echo.
echo Certificate generation complete!
echo.
echo CA Certificate:
echo certs\ca.crt
echo.
echo Server Certificates:
echo certs\server.crt
echo certs\server.key
echo.
echo Client Certificates:
echo certs\client.crt
echo certs\client.key
echo.
pause
《上一篇》Anima:全新 2B 參數二次元模型,能否快速生成 NSFW 的圖片? 









留言區 / Comments
萌芽論壇