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 :)
- MQTT:使用Mosquitto作为broker,SSL加密,附Java Demo
- MQTT Mosquitto broker with SSL/TLS transport security
- android mosquitto客户端使用SSL功能的具体操作总结(android mqtt ssl 加密)
- MQTT(使用mosquitto做broker)做Android推送总结
- MQTT(使用mosquitto做broker)做Android推送部分总结
- MQTT(使用mosquitto做broker)做Android推送部分总结
- MQTT(使用mosquitto做broker)做Android推送部分总结
- Mosquitto 0.15 开源MQTT v3.1 Broker
- Mosquitto 0.15 开源MQTT v3.1 Broker
- 在MQTT服务器mosquitto上使用SSL/TSL
- MQTT--mosquitto使用详解
- MQTT Mosquitto安装和使用
- mqtt mosquitto tls java 客户端
- MQTT client JAVA 和 MQTT broker
- java版mosquitto客户端使用SSL功能的具体操作总结
- Java加密测试(附Demo)
- [2] MQTT,mosquitto,Eclipse Paho----mosquitto使用扫盲
- [12]MQTT mosquitto 单向SSL认证的配置方式
- IOS 仿淘宝购物列表一键TOP置顶,小功能,挺实用
- JQuery基本语法
- 网站架构消息队列小议
- 2014年首届CCF软件能力认证试题第一题 .
- sql server中常用函数集锦(整理)
- MQTT:使用Mosquitto作为broker,SSL加密,附Java Demo
- java代码优化总结
- php爬虫教程(三)规则分析
- mujijin每日检测
- 数据库大型应用解决方案总结
- 阿里云单邮件发送 - 整理说明文档
- MySQL性能优化总结
- hibernate 出现Caused by: java.sql.SQLException: Column 'id' not found.异常
- leetcode:数学:Rectangle Area(223)