MQTT:使用Mosquitto作为broker,SSL加密,附Java Demo

来源:互联网 发布:youxi域名 编辑:程序博客网 时间:2024/06/07 04:52

0.前言

在物联网项目中经常使用到MQTT协议。对于MQTT协议来说Mosquitto是一个不错的broker,它可以作为一个消息代理,管理mqtt消息。当然就不比较MQTT和CoAP、Mosquitto和Apollo的优劣,有兴趣的同学可以自己选择方案实践下。


1.安装Mosquitto

这个比较easy,Linux下下载安装即可。
# 下载源代码包wget http://mosquitto.org/files/source/mosquitto-x.x.x.tar.gz (自己选版本号)# 解压tar zxfv mosquitto-x.x.x.tar.gz# 进入目录cd mosquitto-1.4.5# 编译make# 安装sudo make install
可能遇到的问题:
【1】编译找不到openssl/ssl.h    【解决方法】——安装opensslsudo apt-get install libssl-dev【2】编译过程找不到ares.hsudo apt-get install libc-ares-dev【3】编译过程找不到uuid/uuid.hsudo apt-get install uuid-dev【4】使用过程中找不到libmosquitto.so.1error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory    【解决方法】——修改libmosquitto.so位置# 创建链接sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1# 更新动态链接库sudo ldconfig【5】make: g++:命令未找到      【解决方法】    安装g++编译器sudo apt-get install g++

安装可以参考这篇文章:MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用


2.运行测试Mosquitto

简单的测试下Mosquitto,可以通过如下步骤:

2.1 启动代理服务

mosquitto -v  &

    【-v】打印更多的调试信息 
    【&】方便退出命令行

2.2 订阅主题

mosquitto_sub -v -t sensor    

【-t】指定主题,此处为sensor    【-v】打印更多的调试信息

2.3 发布内容

mosquitto_pub -t sensor  -m 12    

【-t】指定主题    【-m】指定消息内容2.4 运行结果    


当发布者推送消息之后,订阅者获得以下内容    sensor 12

测试依旧可以参考这篇文章:MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用


3.SSL证书的生成

生成SSL证书我们需要OpenSSL这个开源项目,具体使用方法参考这篇文章:Mosquito使用SSL/TLS进行安全通信时的使用方法
注意:该文章中的命令格式有问题,下面重新写一次。
3.1生成ca文件
产生自己的CA 为CA生成两个文件:ca.key和ca.crt

openssl req -new -x509 -days 36500 -extensions v3_ca -keyout ca.key -out ca.crt
将这两个文件分别拷贝到server端和client端机器上,就可以使用openssl生成server和client的证书了。为了方便,所有的证书都在一个机器上生成,只不过配置不同。

3.2  server:产生server.key

openssl genrsa -out server.key 2048

3.3  server:产生server.csr

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

3.4  server:产生证书server.crt

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

3.5  client:产生client.key

openssl genrsa -out client.key 2048

3.6  client:产生client.csr

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

3.7 client:产生client.crt

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

注意事项:server和client的证书文件是可以在一个机器上生成的,注意在生成证书的时候有一项是Common Name (eg, your name or your server's hostname) [ ]:,这个要填证书所在服务器的ip,server的就填server的ip,client的就填client的ip。


4.Mosquitto的配置

之后需要配置下Mosquitto的conf文件。


主要配置项:
port xxxx   SSL通信端口
修改cafile参数,该参数表示CA的证书文件的位置
修改certfile参数,该参数表示CA为server端签发的证书文件的位置
修改keyfile参数,该参数表示server端使用的key文件的位置


修改后:

port xxxx#capathcafile /usr/xxxxx/ca.crt# Path to the PEM encoded server certificate.certfile /usr/xxxxx/server.crt# Path to the PEM encoded keyfile.keyfile /usr/xxxxx/server.key 

ok,配置完毕!


5.测试SSL

5.1启动Mosquitto,使用配置文件

mosquitto -c mosquitto.conf

5.2启动订阅

mosquitto_sub-h 120.76.xx.xx -i 111 -p 1883 -t "test_topic" --cafile /usr/xxxxx/ca.crt --cert /usr/xxxxx/client.crt --key /usr/xxxxx/client.key --insecure

最后那个--insecure是SSL在身份认证的时候不用检查主机名。

5.3启动发布

mosquitto_pub -h 120.76.xx.xx -p 1883 -t "test_topic" -m "this is  SSL" --cafile /usr/xxxxx/ca.crt --cert /usr/xxxxx/client.crt --key /usr/xxxxx/client.key

可以在订阅端看到收到消息,这里就不截图了。


6.Java版本的Demo

Java版本的Demo在此:https://github.com/Lunatictwo/mqtt-ssl-java


7.

没有7 :)


1 0
原创粉丝点击