×

EMQ X MQTT 服務(wù)器啟用 SSL/TLS 安全連接

分類(lèi):互聯(lián)網(wǎng)熱點(diǎn) 編輯:it知事 瀏覽量:255
2020-07-13 16:55:23
作為基于現(xiàn)代密碼學(xué)公鑰算法的安全協(xié)議,TLS/SSL 能在計(jì)算機(jī)通訊網(wǎng)絡(luò)上保證傳輸安全,EMQ X 內(nèi)置對(duì) TLS/SSL 的支持,包括支持單/雙向認(rèn)證、X.509 證書(shū)、負(fù)載均衡 SSL 等多種安全認(rèn)證。你可以為 EMQ X 支持的所有協(xié)議啟用 SSL/TLS,也可以將 EMQ X 提供的 HTTP API 配置為使用 TLS。本文將介紹如何在 EMQ X 中為 MQTT 啟用 TLS。SSL/TLS 帶來(lái)的安全優(yōu)勢(shì)強(qiáng)認(rèn)證。 用 TLS 建立連接的時(shí)候,通訊雙方可以互相檢查對(duì)方的身份。在實(shí)踐中,很常見(jiàn)的一種身份檢查方式是檢查對(duì)方持有的 X.509 數(shù)字證書(shū)。這樣的數(shù)字證書(shū)通常是由一個(gè)受信機(jī)構(gòu)頒發(fā)的,不可偽 造。保證機(jī)密性。TLS 通訊的每次會(huì)話都會(huì)由會(huì)話密鑰加密,會(huì)話密鑰通訊雙方協(xié)商產(chǎn)生。任何第三方都無(wú)法知曉通訊內(nèi)容。即使一次會(huì)話的密鑰泄露,并不影響其他會(huì)話的安全性。完整性。 加密通訊中的數(shù)據(jù)很難被篡改而不被發(fā)現(xiàn)。SSL/TLS 協(xié)議TLS/SSL 協(xié)議下的通訊過(guò)程分為兩部分,第一部分是握手協(xié)議。握手協(xié)議的目的是鑒別對(duì)方身份并建立一個(gè)安全的通訊通道。握手完成之后雙方會(huì)協(xié)商出接下來(lái)使用的密碼套件和會(huì)話密鑰;第二部分是 record 協(xié)議,record 和其他數(shù)據(jù)傳輸協(xié)議非常類(lèi)似,會(huì)攜帶內(nèi)容類(lèi)型,版本,長(zhǎng)度和荷載等信息,不同的是它所攜帶的信息是加密了的。下面的圖片描述了 TLS/SSL 握手協(xié)議的過(guò)程,從客戶(hù)端的 "hello" 一直到服務(wù)器的 "finished" 完成握手。有興趣的同學(xué)可以找更詳細(xì)的資料看。對(duì)這個(gè)過(guò)程不了解也并不影響我們?cè)?EMQ X 中啟用這個(gè)功能。SSL/TLS 證書(shū)準(zhǔn)備通常來(lái)說(shuō),我們會(huì)需要數(shù)字證書(shū)來(lái)保證 TLS 通訊的強(qiáng)認(rèn)證。數(shù)字證書(shū)的使用本身是一個(gè)三方協(xié)議,除了通訊雙方,還有一個(gè)頒發(fā)證書(shū)的受信第三方,有時(shí)候這個(gè)受信第三方就是一個(gè) CA。和 CA 的通訊,一般是以預(yù)先發(fā)行證書(shū)的方式進(jìn)行的。也就是在開(kāi)始 TLS 通訊的時(shí)候,我們需要至少有 2 個(gè)證書(shū),一個(gè) CA 的,一個(gè) EMQ X 的,EMQ X 的證書(shū)由 CA 頒發(fā),并用 CA 的證書(shū)驗(yàn)證。獲得一個(gè)真正受外界信任的證書(shū)需要到證書(shū)服務(wù)提供商進(jìn)行購(gòu)買(mǎi)。在實(shí)驗(yàn)室環(huán)境,我們也可以用自己生成的證書(shū)來(lái)模擬這個(gè)過(guò)程。下面我們分別以這兩種方式來(lái)說(shuō)明 EMQ X 服務(wù)器的 SSL/TLS 啟用過(guò)程。注意: 購(gòu)買(mǎi)證書(shū)與自簽名證書(shū)的配置,讀者根據(jù)自身情況只需選擇其中一種進(jìn)行測(cè)試。 購(gòu)買(mǎi)證書(shū)如果有購(gòu)買(mǎi)證書(shū)的話,就不需要自簽名證書(shū)。為方便 EMQ X 配置,請(qǐng)將購(gòu)買(mǎi)的證書(shū)文件重命名為 emqx.crt,證書(shū)密鑰重命名為 emqx.key。 自簽名證書(shū)在這里,我們假設(shè)您的系統(tǒng)已經(jīng)安裝了 OpenSSL。使用 OpenSSL 附帶的工具集就可以生成我們需要的證書(shū)了。首先,我們需要一個(gè)自簽名的 CA 證書(shū)。生成這個(gè)證書(shū)需要有一個(gè)私鑰為它簽名,可以執(zhí)行以下命令來(lái)生成私鑰:openssl genrsa -out my_root_ca.key 2048這個(gè)命令將生成一個(gè)密鑰長(zhǎng)度為 2048 的密鑰并保存在 my_root_ca.key 中。有了這個(gè)密鑰,就可以用它來(lái)生成 EMQ X 的根證書(shū)了:openssl req -x509 -new -nodes -key my_root_ca.key -sha256 -days 3650 -out my_root_ca.pem根證書(shū)是整個(gè)信任鏈的起點(diǎn),如果一個(gè)證書(shū)的每一級(jí)簽發(fā)者向上一直到根證書(shū)都是可信的,那個(gè)我們就可以認(rèn)為這個(gè)證書(shū)也是可信的。有了這個(gè)根證書(shū),我們就可以用它來(lái)給其他實(shí)體簽發(fā)實(shí)體證書(shū)了。實(shí)體(在這里指的是 EMQ X)也需要一個(gè)自己的私鑰對(duì)來(lái)保證它對(duì)自己證書(shū)的控制權(quán)。生成這個(gè)密鑰的過(guò)程和上面類(lèi)似:openssl genrsa -out emqx.key 2048新建 openssl.cnf 文件,req_distinguished_name :根據(jù)情況進(jìn)行修改,alt_names:BROKER_ADDRESS 修改為 EMQ X 服務(wù)器實(shí)際的 IP 或 DNS 地址,例如:IP.1 = 127.0.0.1,或 DNS.1 = broker.xxx.comdefault_bits = 2048distinguished_name = req_distinguished_namereq_extensions = req_extx509_extensions = v3_reqprompt = nocountryName = CNstateOrProvinceName = ZhejianglocalityName = HangzhouorganizationName = EMQXcommonName = Server certificatesubjectAltName = @alt_namessubjectAltName = @alt_namesIP.1 = BROKER_ADDRESSDNS.1 = BROKER_ADDRESS然后以這個(gè)密鑰和配置簽發(fā)一個(gè)證書(shū)請(qǐng)求:openssl req -new -key ./emqx.key -config openssl.cnf -out emqx.csr然后以根證書(shū)來(lái)簽發(fā) EMQ X 的實(shí)體證書(shū):openssl x509 -req -in ./emqx.csr -CA my_root_ca.pem -CAkey my_root_ca.key -CAcreateserial -out emqx.pem -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf準(zhǔn)備好證書(shū)后,我們就可以啟用 EMQ X 的 TLS/SSL 功能了。SSL/TLS 啟用及驗(yàn)證在 EMQ X 中 mqtt:ssl 的默認(rèn)監(jiān) 聽(tīng)端口為 8883。 購(gòu)買(mǎi)證書(shū)方式EMQ X 配置將前文重命名后的 emqx.key 文件及 emqx.crt 文件拷貝到 EMQ X 的 etc/certs/ 目錄下,并參考如下配置修改 emqx.conf:## listener.ssl.$name is the IP address and port that the MQTT/SSL## Value: IP:Port | Portlistener.ssl.external = 8883## Path to the file containing the user's private PEM-encoded key.## Value: Filelistener.ssl.external.keyfile = etc/certs/emqx.key## Path to a file containing the user certificate.## Value: Filelistener.ssl.external.certfile = etc/certs/emqx.crtMQTT 連接測(cè)試當(dāng)配置完成并重啟 EMQ X 后,我們使用 MQTT 客戶(hù)端工具 - MQTT X (該工具跨平臺(tái)且支持 MQTT 5.0 ),來(lái)驗(yàn)證 TLS 服務(wù)是否正常運(yùn)行。MQTT X 版本要求:v1.3.2 及以上版本參照下圖在 MQTT X 中創(chuàng)建 MQTT 客戶(hù)端(Host 輸入框里的 mqttx.app 需替換為實(shí)際的域名)注意:在 Certificate 一欄只需選擇 CA signed server 即可,使用購(gòu)買(mǎi)證書(shū)在進(jìn)行單向認(rèn)證連接時(shí)不需要攜帶任何證書(shū)文件(CA 文件也不需要攜帶)。點(diǎn)擊 Connect 按鈕,連接成功后,如果能正常執(zhí)行 MQTT 發(fā)布/訂閱 操作,則購(gòu)買(mǎi)證書(shū)的 SSL 單向認(rèn)證配置成功。 自簽名證書(shū)方式EMQ X 配置將前文中通過(guò) OpenSSL 工具生成的 emqx.pem、emqx.key 及 my_root_ca.pem 文件拷貝到 EMQ X 的 etc/certs/ 目錄下,并參考如下配置修改 emqx.conf:## listener.ssl.$name is the IP address and port that the MQTT/SSL## Value: IP:Port | Portlistener.ssl.external = 8883## Path to the file containing the user's private PEM-encoded key.## Value: Filelistener.ssl.external.keyfile = etc/certs/emqx.key## Path to a file containing the user certificate.## Value: Filelistener.ssl.external.certfile = etc/certs/emqx.pem## Path to the file containing PEM-encoded CA certificates. The CA certificates## Value: Filelistener.ssl.external.cacertfile = etc/certs/my_root_ca.pemMQTT 連接測(cè)試當(dāng)配置完成并重啟 EMQ X 后,我們使用 MQTT 客戶(hù)端工具 - MQTT X (該工具跨平臺(tái)且支持 MQTT 5.0 ),來(lái)驗(yàn)證 TLS 服務(wù)是否正常運(yùn)行。MQTT X 版本要求:v1.3.2 及以上版本參照下圖在 MQTT X 中創(chuàng)建 MQTT 客戶(hù)端(Host 輸入框里的 127.0.0.1 需替換為實(shí)際的 EMQ X 服務(wù)器 IP)此時(shí) Certificate 一欄需要選擇 Self signed ,并攜帶自簽名證書(shū)中生成的 my_root_ca.pem 文件。點(diǎn)擊 Connect 按鈕,連接成功后,如果能正常執(zhí)行 MQTT 發(fā)布/訂閱 操作,則自簽名證書(shū)的 SSL 單向認(rèn)證配置成功。 EMQ X Dashboard 驗(yàn)證最后,打開(kāi) EMQ X 的 Dashboard 在 Listeners 頁(yè)面可以看到在 8883 端口上有一個(gè) mqtt:ssl 連接。至此,我們成功的完成了 EMQ X 服務(wù)器的 SSL/TLS 配置及單向認(rèn)證連接測(cè)試。EMQ X SSL/TLS 雙向認(rèn)證配置文檔請(qǐng)關(guān)注我們的后續(xù)文章。
點(diǎn)擊"閱讀原文" ,了解更多↓↓↓

聲明:免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)

送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)

需注明出處:新網(wǎng)idc知識(shí)百科

免費(fèi)咨詢(xún)獲取折扣

Loading