服务器安装MQTT服务器并启用websockets,配置SSL
背景
最近接触物联网,感觉太有意思了,打算弄个用手机控制的遥控小车,
手机与小车之前通讯采用MQTT,服务器就需要安装mosquitto,于是就有了这篇文章,期间经历了不为人知的心酸与苦楚,早上起来,到晚上6点才整成功,记录一下中间过程。
环境
linux centos7.4
1. 直接安装mosquitto
这种方式是linux直接安装安装mosqutto软件的方式,
但是我这边配置ws,wss, SSL证书的教程没有,只支持到mqtt消息订阅与发布
总结就是操作简单,很容易就安装,并投入使用。
如果需要配置ws,wss,SSl等,请直接去第二步骤。
(第二部操作会比较繁琐,功能也能强大,比如支持微信小程序需要的wss加密链接)
需要提前准备一下基础环境
cmake用来编译代码,经常用
yum install gcc-c++
yum install cmake
yum install openssl-devel
创建一个soft文件夹,用来存放下载的文件
mkdir soft
下载mosquitto源码
cd soft
wget http://mosquitto.org/files/source/mosquitto-1.4.10.tar.gz
有好多个版本,找个喜欢的数字下载吧,官网地址
编译安装
tar -xzvf mosquitto-1.4.10.tar.gz
cd mosquitto-1.4.10
cmake ..
make
make install
启动mosquitto
简单配置一下
mv /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf
启动程序
-d 表示挂后台,根据自己情况要不要加
mosquitto -c /etc/mosquitto/mosquitto.conf -d
默认端口是1883
查看一下这个端口是否被占用,能看到tcp,tcp6两行基本上就算成功了。
netstat -tunlp|grep 1883
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 18987/mosquitto
tcp6 0 0 :::1883 :::* LISTEN 18987/mosquitto
再用软件MQtt.fx简单测试一下我们部署的mqtt服务;
发布一个hello 主题的 消息
注意
如果中间出现什么找不到libmosquitto.so.1的话,输入以下指令修改一下libmosquitto.so的位置
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
sudo ldconfig
就这么简单?
虽然成功了,但是有个问题需要思考一下,目前为止好像还没有验证账号,随便哪个人都能用呢。
现在来配置账号
修改一下配置文件"/etc/mosquitto/mosquitto.conf",没有的话自己创建一个“touch” 指令。
#禁止匿名登录
allow_anonymous false
#存放用户的文件
password_file /etc/mosquitto/pwfile.example
#权限文件
acl_file /etc/mosquitto/aclfile.example
创建账号
test 账号,test123 是密码
mosquitto_passwd -b /mosquitto/config/pwfile.conf test test123
然后重新启动一下mosquitto服务。就可以了。
还没结束
先说说需求吧,在手机点开一个连接,进入控制界面,点击按钮实现 小车的前进后退等功能。
这时候需要实时交互,但是浏览器不支持mqtt 协议,只有websockets能用,这时候就到这个文章的重点了,我得给mosquitto 支持websockets!
踩坑正式开始
网上搜了一大堆文章都是说直接修改下面这个配置文件
/etc/mosquitto/mosquitto.conf
然后我就改了,加了websockets进去
#MQTT协议
port 1883
#websockets协议
# 主要是这两行
listener 8888
protocol websockets
#
#禁止匿名登录
allow_anonymous false
#存放用户的文件
password_file /etc/mosquitto/pwfile.example
#权限文件
acl_file /etc/mosquitto/aclfile.example
然后启动mosquitto,报错了
Error: Websockets support not available. Error found at /etc/mosquitto/mosq...
到处搜解决办法,看了几个都是说在mosquitto安装目录里面config.mk修改配置 no=>yes
# Build with websockets support on the broker.
WITH_WEBSOCKETS:=no
改成yes后,重新编译文件,运行mosquitto,还是一样的报错!就是这个问题花了一下午时间都在找解决办法,后面还不得不尝试各个版本的mosquitto,最后还是失败!
没办法了,后来无意间看到docker,就想去用docker试试了。
2. Docker 安装mosquitto,并配置websockets
eclipse-mosquitto这个镜像应该是docker上面使用最多的,功能也很强大。
可以支持:
mqtt: http 非加密型
mqtt: https 加密型
ws: websockets 的http 非加密型
wss: websockets的https 加密型
平时使用的mqtt一般都是使用1883端口
如果开启websockets就是mqtt支持websocket, 例如:http://mqtt.xxx.com
如果开启websockets并配置证书密钥就是mqtt支持websockets,例如:https:mqtt.xxx.com
像微信小程序只支持https,这也是我写下这篇文章的来源了。
1. 下载镜像
docker pull eclipse-mosquitto
2. 创建一些配置文件的映射文件
每次重启,都从linux环境中的文件映射给docker容器里面程序
注意一下当前为止,pwd 指令。我用的是home目录
mkdir -p /home/mosquitto/config
mkdir -p /home/mosquitto/data
mkdir -p /home/mosquitto/log
3. 分配权限
chmod -R 755 /home/mosquitto
chmod -R 777 /home/mosquitto/log
4. 创建mqtt的配置文件
这个是我自己用的,支持http与https的
# 关闭匿名模式
allow_anonymous false
# 指定密码文件
password_file /mosquitto/config/pwfile.conf
#持久化本地存储
persistence true
persistence_location /mosquitto/data
#日志的保存文件
log_dest file /mosquitto/log/mosquitto.log#log_type error
#log_type warning
#log_type notice
#log_type subscribe
#log_type unsubscribe# mqtt 这个端口是mqtt默认用的,尽量别改
listener 1883
protocol mqtt# websocket 端口根据自己需要修改
listener 8887
protocol websockets
#websockets_log_level all# websocket ssl 端口根据自己需要修改
listener 9001
protocol websockets
cafile /mosquitto/data/mqtt.xxx.com.ca.crt
keyfile /mosquitto/data/mqtt.xxx.com.server.key
certfile /mosquitto/data/mqtt.xxx.com.server.crt# mqtt ssl ,端口根据自己需要修改
listener 8883
protocol mqtt
cafile /mosquitto/data/mqtt.xxx.com.ca.crt
keyfile /mosquitto/data/mqtt.xxx.com.server.key
certfile /mosquitto/data/mqtt.xxx.com.server.crt
tls_version tlsv1.2
5. 生成加密证书
不难发现上面的配置文件只要是涉及到https ssl的两个端口都要证书
生成证书指令,这边需要的是linux的openssl指令(没有的自己装一下)。
这边有个需要注意的地方是,创建两个key的时候记得用不同的地址
ca文件
1. 创建ca文件 :openssl genrsa -des3 -out ca.key 2048
2. 创建crt证书文件:openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
3. 创建服务器用的key文件:openssl genrsa -out server.key 2048
4. 服务器需要的scr文件: openssl req -new -out server.csr -key server.key
5. 服务器需要的crt文件:openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 360
实际上配置mqtt ssl的时候只需要三个文件,在第四步列出来了.
其他几个文件如何使用呢?
举个例子,我的客户端,也就是windows电脑有个mqtt软件,
打开SSL/TLS那个标签,就可以选择用ca证书文件的方式访问服务器的htts端口了
6. 运行容器
这里很长一条指令,主要映射mqtt端口1883,其他三个端口根据自己需要配置,配置文件,数据文件,日志文件
docker run -it --name=mosquitto --privileged -p 1883:1883 -p 8886:8886 -p 8887:8887 -p 8888:8888-v /home/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf -v /home/mosquitto/data:/mosquitto/data -v /home/mosquitto/log:/mosquitto/log -d eclipse-mosquitto
这时候应该还没有用户账号,我们去添加几个
7. 添加账号
# 进入docker 容器
docker exec -it mosquitto sh
# 添加账号密码
mosquitto_passwd -b /mosquitto/config/pwfile.conf test test1233
# 创建完成后退出容器,ctrl+p 然后 ctrl+q
8. 重启就完成了
docker restart mosquitto
看看效果
总结
如果用nginx代理那两个ssl的端口的话要加上https哦!
原身安装mosquitto其实很简单,但是其中开启websockets的配置,很坑,配置文件里面只有一个配置yes or no来控制,也没有其他的说明。即使把no 改成yes也不行,最后很是无奈,用上docker,太TM香了。期间查了好多网页打开过几百个链接,百度出来的结果都是一个模子出来的(拉机),后来出去找到了eclipse-mosquitto的官网,看了几篇教程,终于配置好了htts。
服务器安装MQTT服务器并启用websockets,配置SSL相关推荐
- 将证书文件上传至服务器任意位置,Nginx配置ssl证书
获取证书 以腾讯云为例,解析好域名后,前往证书申请页ssl证书申请,因为我的域名也是在腾讯云,所以点击申请后,可以配置自动DNS验证,如果域名不在腾讯云则需要去域名商添加解析,具体看文档指引. 申请完 ...
- 在 Apache Tomcat 服务器上启用 HTTPS 或 SSL 正确方式的分步指南 – 端口 8443
我开始使用Apache Tomcat已经快 12 年了.我相信当我做我的一年级项目时,它是在 Tomcat 版本上1.x.现在它已经在 version 上8.0.在我的日常工作生活中,我大部分时间都在 ...
- 实训报告:DHCP服务器的启用和配置
一.实训目的 1.熟练安装DHCP服务器角色: 2.熟练运用DHCP服务器管理控制台对DHCP服务器进行管理: 3.掌握DHCP客户端的配置. 二.实训设备 1.1台交换机: 2.2台计算机(其中做服 ...
- Spring Boot项目配置ssl证书及自定义ssl端口号
好吧,一切不带s的http裸奔都是耍流氓. 我们知道在一个Web服务器(e.g. Tomcat, Websphere, Nginx)上配置ssl证书很容易,那么如何在SpringBoot这种内嵌了服务 ...
- 我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程
评论» 文章目录 为什么要Https 如何选择Https 安装部署SSL证书 平滑过渡Https 搜索引擎的响应 启用Https小结 正如大家所看到的,部落全站已经启用了Https访问了,连续几天 ...
- 阿里云服务器nginx配置ssl步骤htts
阿里云服务器中要配置ssl 1.先在服务器安装nginx,安装步骤自行搜索,很多. 2.获取ssl证书,可以参考https://mp.csdn.net/console/editor/html/8791 ...
- JavaWeb项目部署服务器并配置ssl证书教程
JavaWeb项目部署服务器并配置ssl证书教程 相信大家学了1.2年的编程后可能已经学会了自己写web项目,但是也只能在自己本地玩耍,十分的打击学习热情(主要是没办法跟朋友装杯).本文是一篇较为详细 ...
- 基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证
配置单/双向认证 1.生成证书 使用如下shell 来生成证书: # * Redistributions in binary form must reproduce the above copyrig ...
- 【手把手教你搭建MQTT服务器 + 域名备案 + 申请与部署SSL证书】
文章目录 购买云服务器实现远程登录 搭建emqx服务器 模拟数据交互测试 购买.解析域名 域名备案 申请SSL证书 emqx配置SSL证书 结语 购买云服务器实现远程登录 购买云服务器 可以按照自己情 ...
最新文章
- 感悟Windows7
- 【Error】InterfaceError (0, '')
- TfidfVectorizer中的参数norm默认值是l2
- Cloudera maneger登录页面后的操作是什么?
- WINDOWS下与LINUX下写C程序的区别
- 便捷式计算机无线功能按钮,TP-Link TL-MR13U便携式无线路由器Client模式设置
- bzoj1572 [Usaco2009 Open]工作安排Job
- 解决Python3 pip list 红色DEPRECATION
- linux glibc安装mysql_Linux安装MySQL-5.6.24-1.linux_glibc2.5.x86_64.rpm
- 西门子S7200PLC连接CHNet-S7200PD实现以太网通信配置方法
- Linux 端蓝牙调试
- c语言 word转pdf,超简单的Word转换成PDF技巧,可惜很多人还不会
- 透明OLED显示器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 为什么有符号整型最小值是-32768?
- 多平台的敏感信息监测工具-GShark
- APP微信支付报错《商户号该产品权限未开通,请前往商户平台产品中心检查后重试》
- 我只是个普通大学生,想进BAT究竟有多难?
- 计算机硬盘只显示c盘,电脑只显示C盘我们应该怎么办
- taobao.trades.sold.get-查询卖家已卖出的交易数据(根据创建时间),淘宝店铺卖出订单查询API接口,淘宝R2接口,淘宝oAuth2.0交易接口代码分享
- 量化金融论文:Astock