EMQX雙向認證指的是客戶端與服務端之間建立安全連接時,不僅服務器需要驗證客戶端的身份,客戶端也需要驗證服務器的身份。本文介紹如何在EMQX服務器和MQTT客戶端配置阿里云自簽名X.509格式證書,實現EMQX的雙向TLS/SSL認證。
本文以Windows 10 64位操作系統、emqx-4.4.19-otp24.3.4.6-windows-amd64和mqttfx-1.7.1-windows-x64(模擬物聯網設備)為例介紹。不同的操作系統、服務器或客戶端設備,部署操作可能有所差異,如有問題,請聯系產品技術專家進行咨詢,詳情請參見專家一對一服務。
前提條件
已通過阿里云私有CA服務申請客戶端和服務端證書。具體操作,請參見申請私有證書。
本文是以阿里云PCA自簽服務端和客戶端證書為例介紹,如果您需要使用CA中心頒發的阿里云服務端證書,您需要購買并申請SSL證書,具體操作,請參見購買SSL證書。
步驟一:準備MQTT客戶端和EMQX服務端證書
本文是以阿里云PCA自簽服務端和客戶端證書為例介紹,如果您需要配置CA中心頒發的阿里云服務端證書或客戶端證書,請參見下載SSL證書到本地或下載根證書和中間證書。
登錄數字證書管理服務控制臺。
在左側導航欄,選擇,在PCA證書管理頁面,選擇PCA服務所在地域。
準備服務端證書。
準備證書鏈文件cacert.pem。
在私有CA頁簽,定位到目標子CA,在操作列,單擊詳情。
在詳情面板,復制子CA證書內容,然后在本地新建一個TXT文件,將該內容粘貼進去,并將文件命名為cacert.pem。
準備證書文件cert.pem和證書私鑰文件key.pem。
在私有CA頁簽,定位到目標子CA,在操作列,單擊證書列表。
在證書列表頁面,定位到目標服務端證書,在操作列,單擊下載。
在證書下載對話框,選擇證書格式為PEM,單擊確認并下載。
解壓證書壓縮包,將證書文件(PEM格式)命名為cert.pem。在Shell終端執行
openssl rsa -in domain.key -out key.pem
,將證書私鑰文件解密,并保存為key.pem。說明domain.key需替換為實際的證書私鑰文件。
準備客戶端證書。
在私有CA頁簽,定位到目標子CA,在操作列,單擊證書列表。
在證書列表頁面,定位到目標服務端證書,在操作列,單擊下載。
在證書下載對話框,選擇證書格式為PEM,單擊確認并下載。
準備包含證書鏈的文件client-cert.pem和私鑰文件client-key.pem。
解壓證書壓縮包,在Shell終端執行
openssl rsa -in <domain.key> -out client-key.pem
,將證書私鑰文件解密,并保存為client-key.pem。說明domain.key需替換為實際的證書私鑰文件。
在私有CA頁簽,定位到目標子CA,在操作列,單擊詳情。在詳情面板,復制子CA證書內容,將該內容粘貼至解壓后的證書文件,并將文件命名為client-cert.pem。
步驟二:替換EMQX服務端默認證書
打開EMQX證書配置目錄\emqx\etc\certs,將步驟一準備的客戶端證書文件(client-cert.pem、client-key.pem)和服務端證書文件(cert.pem、cacert.pem、key.pem)復制粘貼替換certs目錄原有的文件。
在本地操作系統,右鍵單擊圖標,并單擊Windows PowerShell(管理員)(A)。
進入\emqx\bin目錄,執行以下命令,啟動EMQX。
./emqx start
步驟三:配置MQTT客戶端證書
打開MQTT客戶端,單擊圖標。
按照下圖指引,配置Self signed certificates,單擊Apply,單擊OK。
CA Flie:服務端證書鏈文件(cacert.pem)
Client Certificate File:客戶端證書文件(client-cert.pem)
Client Key File:客戶端證書私鑰文件(client-key.pem)
步驟四:測試雙向認證
測試前,您需要在本地操作系統C:\Windows\System32\drivers\etc目錄下的hosts文件添加域名映射,即本地IP與證書綁定域名映射,格式為:127.0.0.1 <domain_name>
。
在MQTT客戶端,單擊Connect。
在Subscribe頁簽,輸入EMQX默認的主題testtopic/#,單擊Subscribe,并等待接收服務端消息。
在本地操作系統的瀏覽器中輸入localhost:18083,進入EMQX管理界面。
在左側導航欄,選擇工具 > Webcocket。
在連接區域,單擊連接。
在消息區域。輸入消息,單擊發送。
在MQTT客戶端,如果接收到消息,表示證書安裝成功。