開放、平等、協(xié)作、快速、分享
我們在上篇文章里面已經(jīng)搭建好了一個(gè)MQTT服務(wù)器,并且進(jìn)行了簡單的發(fā)布和訂閱的測試。但是,我們默認(rèn)使用的是TCP明文傳輸,
從上圖看出,如果被別有用心的人抓包就可以獲取我們的通信內(nèi)容,沒有任何隱私,黑客還可以惡意發(fā)布信息給服務(wù)器,如果是在工業(yè)交通等重要場合則后果不堪設(shè)想。
我們需要在服務(wù)器端和客戶端都是使用TLS來加密我們的信息,保證信息的安全性。
TLS安全連接基本原理
這是一個(gè)簡單的TLS的過程,服務(wù)器和客戶端從CA證書中心取得CA證書,服務(wù)器生成自己的私鑰和證書,客戶端用ca證書對服務(wù)器的證書進(jìn)行驗(yàn)證,驗(yàn)證通過說明服務(wù)器是合法的,如果驗(yàn)證不過則不與服務(wù)器通信。驗(yàn)證通過之后使用一對公鑰和密鑰進(jìn)行加解密通信,中間的報(bào)文都是加密的。
MQTT使用TLS安全連接步驟:
1、生成CA私鑰文件
#mkdir Myca
#cd Myca
# openssl genrsa -des3 -out ca.key 2048
#ls -l
-rwxrwxrwx 1 root root 1743 9月 5 00:08 ca.key
可以看到生成了ca的密鑰文件。
參數(shù)解釋:
genrsa 表示生成RSA私鑰-des3 表示密鑰文件使用DES3加密,如果沒有這個(gè)選項(xiàng)表示不加密密鑰文件。-out 制定輸出文件的名字(.key)2048 表示密鑰長度。
2、生成CA證書
#openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
# ls -l
-rwxrwxrwx 1 root root 1367 9月 6 00:58 ca.crt
rwxrwxrwx 1 root root 1679 9月 6 00:58 ca.key
參數(shù)解釋:
req: 請求生成證書認(rèn)證-new: 生成一個(gè)新的證書. 它會提示填充證書的一些參數(shù).-x509: 簽發(fā)X.509格式證書 .-days: 指定證書的有效期限,單位天.-key: 指定生成證書的私鑰文件.-out: 指定生成的證書文件名(.crt).
3、生成server的私鑰
#openssl genrsa -out server.key 2048
#ls -l
-rwxrwxrwx 1 root root 1367 9月 6 00:58 ca.crt
-rwxrwxrwx 1 root root 1679 9月 6 00:58 ca.key
-rwxrwxrwx 1 root root 1679 9月 6 01:02 server.key ------生成的 server.key
4、生成server端請求文件(.csr)
#openssl req -new -out server.csr -key server.key
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:bj
Locality Name (eg, city) []:bj
Organization Name (eg, company) [Internet Widgits Pty Ltd]:aaa
Organizational Unit Name (eg, section) []:bbb
Common Name (e.g. server FQDN or YOUR name) []:192.168.1.102
Email Address []:test@test.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
5、生成服務(wù)端的證書
#openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3600
這時(shí)候在證書目錄下有下面文件
-rwxrwxrwx 1 root root 1367 9月 6 00:58 ca.crt
-rwxrwxrwx 1 root root 1679 9月 6 00:58 ca.key
-rwxrwxrwx 1 root root 17 9月 6 01:10 ca.srl
-rwxrwxrwx 1 root root 1249 9月 6 01:10 server.crt
-rwxrwxrwx 1 root root 1029 9月 6 01:08 server.csr
-rwxrwxrwx 1 root root 1679 9月 6 01:02 server.key
6、修改mosquitto.conf文件
port 1884 -----設(shè)置TLS端口 為1884
cafile /myca/ca.crt -------- 證書文件
certfile /myca/server.crt ------------服務(wù)器證書文件
keyfile /myca/server.key ------------服務(wù)器私鑰文件
7、啟動mosquitto
使用mosquitto.conf配置文件啟動
8、啟動客戶端
http://www.jensd.de/apps/mqttfx/1.7.0/
在客戶端上先要設(shè)置下TLS訪問,和證書
上圖看到客戶端連接上了
發(fā)一個(gè)消息看看報(bào)文。
可以看到報(bào)文已經(jīng)加密,無法看到報(bào)文的內(nèi)容。
鄭重聲明:本文作品為原創(chuàng),如轉(zhuǎn)載須注明出處“百家號:物聯(lián)網(wǎng)電子世界”。
24小時(shí)免費(fèi)咨詢
請輸入您的聯(lián)系電話,座機(jī)請加區(qū)號