日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

Mosquitto服务器的搭建以及SSL/TLS安全通信配置

發(fā)布時(shí)間:2023/12/13 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 Mosquitto服务器的搭建以及SSL/TLS安全通信配置 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Mosquitto服務(wù)器的搭建以及SSL/TLS安全通信配置

摘自:https://segmentfault.com/a/1190000005079300

openhab

8k 次閱讀 · 讀完需要 22 分鐘

0

1、 SSL簡(jiǎn)介

SSL(SecureSocket Layer)安全套接層,是網(wǎng)景公司提出的用于保證Server與client之間安全通信的一種協(xié)議,該協(xié)議位于TCP/IP協(xié)議與各應(yīng)用層協(xié)議之間,即SSL獨(dú)立于各應(yīng)用層協(xié)議,因此各應(yīng)用層協(xié)議可以透明地調(diào)用SSL來(lái)保證自身傳輸?shù)陌踩裕琒SL與TCP/IP協(xié)議及其其他應(yīng)用層協(xié)議之間的關(guān)系如圖1所示。

圖1 SSL/TLS協(xié)議與應(yīng)用層協(xié)議及tcp/ip層協(xié)議的關(guān)系

目前,SSL被大量應(yīng)用于http的安全通信中,MQTT協(xié)議與http協(xié)議同樣屬于應(yīng)用層協(xié)議,因此也可以像http協(xié)議一樣使用ssl為自己的通信提供安全保證。

SSL與TLS(Transport LayerSecurity Protocol)之間的關(guān)系:
TLS(TransportLayer Security,傳輸層安全協(xié)議)是IETF(InternetEngineering Task Force,Internet工程任務(wù)組)制定的一種新的協(xié)議,它建立在SSL 3.0協(xié)議規(guī)范之上,是SSL 3.0的后續(xù)版本。在TLS與SSL3.0之間存在著顯著的差別,主要是它們所支持的加密算法不同,所以TLS與SSL3.0不能互操作。

開(kāi)源的算法Openssl對(duì)SSL以及TLS1.0都能提供較好的支持,因此,后面使用mosquitto時(shí)也采用Openssl作為SSL的實(shí)現(xiàn)。

2、 Openssl安裝與常用命令說(shuō)明

2.1、安裝
在ubuntu14.04上安裝Openssl的命令如下:

apt-get install openssl-devel

注意在安裝的時(shí)候要安裝“openssl-devel”,而不是“openssl”。
安裝成功之后可以使用如下命令查看openssl的版本:

w@w:~$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

2 Mosquito使用ssl功能的具體操作方法

將使用:A【cddserver2】(172.18.206.221)B【cddserver3】(172.18.195.182)C【cddserver1】(172.18.205.63)這三臺(tái)機(jī)子,其中使用A制作CA證書(shū)B作為服務(wù)器端上運(yùn)行mosquitto實(shí)例在C上運(yùn)行一個(gè)訂閱端,一個(gè)發(fā)布端。

2.1、產(chǎn)生CA的key和證書(shū)文件
使用命令為:

openssl req -new -x509 -days 36500-extensions v3_ca -keyout ca.key -out ca.crt

該命令將為CA產(chǎn)生一個(gè)名字為“ca.key”的key文件和一個(gè)名字為“ca.crt”的證書(shū)文件,這個(gè)crt就是CA自己給自己簽名的證書(shū)文件。

該命令中選項(xiàng)“-x509”表示該條命令將產(chǎn)生自簽名的證書(shū),一般都是測(cè)試的時(shí)候采用。

命令執(zhí)行過(guò)程中將需要輸入國(guó)別、省份(或州)、市、Common Name等參數(shù),其中最需要注意的是” Common Name”這個(gè)參數(shù),它必須是當(dāng)前機(jī)子的IP地址,使用主機(jī)名不行。如下截圖所示

特別要注意的是Common Name參數(shù)需要填寫(xiě)主機(jī)的IP地址,使用主機(jī)名不行。
本步結(jié)束即產(chǎn)生自己的CA,它有兩個(gè)文件“ca.key“和”ca.crt“:

2.2、使用自己產(chǎn)生的CA為server簽發(fā)證書(shū)
將3.1中產(chǎn)生的CA文件拷貝mosquitto server所在機(jī)子上(其主機(jī)名字為cddserver3)的某個(gè)位置,例如:/home/lvhao/w/ssl,然后使用該CA為server產(chǎn)生證書(shū)文件。如下截圖所示:


圖2-3

(1)產(chǎn)生密鑰文件server.key,為了減少測(cè)試過(guò)程中總是提出輸入密碼的麻煩,這里將為server產(chǎn)生一個(gè)不加密的密鑰文件。過(guò)程如下截圖所示:
該命令將產(chǎn)生一個(gè)不加密的RSA私鑰,其中參數(shù)“2048”表示私鑰的長(zhǎng)度,這里產(chǎn)生的私鑰文件“server.key”將在下一步使用,同時(shí)在mosquitto程序的配置文件中也需要使用。
opensslgenrsa -out server.key 2048

圖2-4

如果需要為產(chǎn)生的RSA私鑰加密,則需加上選項(xiàng)“-des3”,對(duì)私鑰文件加密之后,后續(xù)使用該密鑰的時(shí)候都要求輸入密碼。產(chǎn)生加密RSA私鑰文件的命令如下:

opensslgenrsa -des3 -out server.key 2048

如果為RSA私鑰文件加密了,則一定要記好密碼,后面產(chǎn)生csr文件時(shí)以及后續(xù)使用該私鑰文件都會(huì)用到該密碼。

(2)產(chǎn)生證書(shū)簽發(fā)的請(qǐng)求文件server.csr。過(guò)程如下截圖所示:
該命令將使用上一步產(chǎn)生的“server.key”文件為server產(chǎn)生一個(gè)簽發(fā)證書(shū)所需要的請(qǐng)求文件:server.csr,使用該文件向CA發(fā)送請(qǐng)求才會(huì)得到CA簽發(fā)的證書(shū)。

opensslreq -out server.csr -key server.key -new

圖2-5

同樣該過(guò)程需要注意Common Name參數(shù)需要填寫(xiě)當(dāng)前主機(jī)的IP地址。

(3)為mosquitto server產(chǎn)生證書(shū)文件:server.crt,這一步將需要輸入CA的密碼,同樣,這里也可以看到剛才為CA輸入的參數(shù)國(guó)別、省份等參數(shù),過(guò)程如下截圖所示:

openssl x509 -req -in server.csr -CA ca.crt-CAkey ca.key -CAcreateserial -out server.crt -days 36500

該命令將使用CA的密鑰文件ca.key,CA的證書(shū)文件ca.crt和上一步為mosquitto server產(chǎn)生證書(shū)請(qǐng)求文件server.csr文件這三個(gè)文件向CA請(qǐng)求產(chǎn)生一個(gè)證書(shū)文件,證書(shū)文件的名字為:server.crt。該命令中的36500可以修改為自己定義的時(shí)間值。

圖2-6

2.3、使用自己產(chǎn)生的CA為client簽發(fā)證書(shū)該過(guò)程與3.2類(lèi)似。
首先,將3.1中產(chǎn)生的CA文件拷貝mosquittoclient所在機(jī)子C(其主機(jī)名字為cddserver1)上的某個(gè)位置,例如:/home/lvhao/w/ssl,然后使用該CA為server產(chǎn)生證書(shū)文件。如下截圖所示:


圖2-7
(1)產(chǎn)生密鑰文件client.key,過(guò)程如下截圖所示:

openssl genrsa-out client.key 2048

(2)產(chǎn)生一個(gè)簽發(fā)證書(shū)的請(qǐng)求文件"client.csr "

openssl req-out client.csr -key client.key-new

產(chǎn)生證書(shū)請(qǐng)求文件時(shí)需要第一步產(chǎn)生的私鑰文件client.key作為輸入。

(3) CA為mosquitto客戶(hù)端產(chǎn)生一個(gè)證書(shū)文件”client.crt”

opensslx509 -req -in client.csr-CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500

2.4、修改mosquitto配置文件
為了使用SSL功能Mosquito的配置文件mosquitto.conf需要修改以下四個(gè)地方:
(1)port 參數(shù),mosquitto官方網(wǎng)站建議在使用功能的時(shí)候使用8883端口,如下所示:

(2)修改cafile參數(shù),該參數(shù)表示CA的證書(shū)文件的位置,需將其設(shè)置為正確的位置,例如下圖所示

2.5、運(yùn)行程序
(1)啟動(dòng)mosquitto server端【機(jī)器B】
使用修改后的配置文件啟動(dòng)mosquitto程序,上面修改的配置文件的路徑,在mosquitto目錄下,因此需要用-c參數(shù)指定其位置,如下圖所示:

(2)啟動(dòng)訂閱端【機(jī)器C】:
訂閱端所在ssl文件的路徑為:/home/jason.hou/ssl,啟動(dòng)時(shí)所使用的命令為:

./mosquitto_sub -h 172.18.195.182 -i 111 -p 8883 -t "111" --cafile /home/lvhao/w/ssl/ca.crt --cert /home/lvhao/w/ssl/client.crt --key /home/lvhao/w/ssl/client.key

如下圖所示:

(4)啟動(dòng)發(fā)布端【機(jī)器C】
啟動(dòng)時(shí)所使用的命令為:

./mosquitto_pub -h 172.18.195.182 -p 8883 -t "111" -m "this is w show"--cafile /home/lvhao/w/ssl/ca.crt --cert /home/lvhao/w/ssl/client.crt --key /home/lvhao/w/ssl/client.key

如下圖所示:

(5) 發(fā)布消息之后,mosquitto、訂閱端、發(fā)布端的截圖如下:
Mosquito:

發(fā)布端【機(jī)器C】:

訂閱端【機(jī)器C】:

1、 注意事項(xiàng)
(1) 制作簽發(fā)證書(shū)的請(qǐng)求文件時(shí),需要輸入Common Name參數(shù),此參數(shù)一定為當(dāng)前主機(jī)的IP地址,否則將會(huì)顯示證書(shū)錯(cuò)誤。
(2) 如果不想SSL在身份認(rèn)證的時(shí)候檢查主機(jī)名(也即上面不檢查第1條中Common Name參數(shù)),則需要在啟動(dòng)訂閱端的時(shí)候,加上“--insecure”參數(shù),例如:
./mosquitto_sub-h 192.168.4.223 -i 111 -p 8883 -t "111" --cafile/home/jason.hou/ssl/ca.crt --cert /home/jason.hou/ssl/client.crt --key/home/jason.hou/ssl/client.key --insecure
(3) 自測(cè)過(guò)程中,server端與所有客戶(hù)端所使用的證書(shū)必須由一個(gè)CA簽發(fā),否則,將會(huì)提示CA不識(shí)別的問(wèn)題。

3 Mosquitto的安裝:

見(jiàn)網(wǎng)址:
http://blog.csdn.net/xukai871...

3.1 安裝
下載源代碼包

wget http://mosquitto.org/files/source/mosquitto-1.4.10.tar.gz

解壓

tar zxfv mosquitto-1.4.5.tar.gz

進(jìn)入目錄

cd mosquitto-1.4.10

編譯

make

安裝

sudo make install

3.2 安裝注意點(diǎn)

【1】編譯找不到openssl/ssl.h
【解決方法】——安裝openssl

sudo apt-get install libssl-dev

【2】編譯過(guò)程找不到ares.h

sudo apt-get install libc-ares-dev

【3】編譯過(guò)程找不到uuid/uuid.h

sudo apt-get install uuid-dev

【4】使用過(guò)程中找不到libmosquitto.so.1

errorwhileloading shared libraries: libmosquitto.so.1: cannotopenshared object file: No such fileordirectory

【解決方法】——修改libmosquitto.so位置
創(chuàng)建鏈接

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1

更新動(dòng)態(tài)鏈接庫(kù)

sudo ldconfig

【5】make: g++:命令未找到
【解決方法】安裝g++編譯器

sudo apt-get install g++

3.2 簡(jiǎn)單測(cè)試

一個(gè)完整的MQTT示例包括一個(gè)代理器,一個(gè)發(fā)布者和一個(gè)訂閱者。測(cè)試分為以下幾個(gè)步驟:

【1】啟動(dòng)服務(wù)mosquitto。
【2】訂閱者通過(guò)mosquitto_sub訂閱指定主題的消息。
【3】發(fā)布者通過(guò)mosquitto_pub發(fā)布指定主題的消息。
【4】代理服務(wù)器把該主題的消息推送到訂閱者。

【測(cè)試說(shuō)明】
測(cè)試環(huán)境:ubuntu 14.04 虛擬機(jī)
在本例中,發(fā)布者、代理和訂閱者均為localhsot,但是在實(shí)際的情況下三種并不是同一個(gè)設(shè)備,在mosquitto中可通過(guò)-h(--host)設(shè)置主機(jī)名稱(chēng)(hostname)。為了實(shí)現(xiàn)這個(gè)簡(jiǎn)單的測(cè)試案例,需要在linux中打開(kāi)三個(gè)控制臺(tái),分別代表代理服務(wù)器、發(fā)布者和訂閱者。

3.2.1 啟動(dòng)代理服務(wù)

mosquitto-v

【-v】打印更多的調(diào)試信息

3.2.2 訂閱主題

mosquitto_sub-v -t sensor

【-t】指定主題,此處為sensor
【-v】打印更多的調(diào)試信息

3.2.3 發(fā)布內(nèi)容

mosquitto_pub-t sensor -m12

【-t】指定主題
【-m】指定消息內(nèi)容

3.2.4 運(yùn)行結(jié)果
當(dāng)發(fā)布者推送消息之后,訂閱者獲得以下內(nèi)容

sensor12

而代理服務(wù)器控制臺(tái)中會(huì)出現(xiàn)——連接、消息發(fā)布和心跳等調(diào)試信息。通過(guò)代理服務(wù)器的調(diào)試輸出可以對(duì)MQTT協(xié)議的相關(guān)過(guò)程有所了解。

4 總結(jié)

服務(wù)器Apollo與Mosquitto的對(duì)比。

總結(jié)

以上是生活随笔為你收集整理的Mosquitto服务器的搭建以及SSL/TLS安全通信配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。