基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证
基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证
摘自:https://blog.csdn.net/ty1121466568/article/details/81118468
本文为参考网上其他博文搭建出服务器后的步骤记录,如有冒犯,请私信!!!
1.2方法二:在Ubuntu下使用apt-get安装... 5
第 1 章 安装Mosquitto
在Ubuntu下安装该软件的常用方法有两种,两种均能使该软件作为中转服务器使用,不过笔者在使用方法二安装的mosquitto时,有些配置没有生效,不知是否是笔者当时在配置是否有误还是该方式安装的不完全(该方式安装的mosquitto要比编译安装的少一些示例配置文件)。要想使用双向认证,单向认证等功能,推荐使用方法一。
1.1 方法一:手动编译安装
step1.下载源码
Mosquitto官网:http://mosquitto.org/
Mosquitto最新的源码:http://mosquitto.org/files/source/
选择一个喜欢的版本即可,笔者在这里选择最新的1.5版
mosquitto-1.5.tar.gz
step2.解压源码
tar -xzvf mosquitto-1.5.tar.gz
step3.进入源码目录
cd mosquitto-1.5/
step4.编译和安装
make && make install
其中,make install需要root权限。
在安装过程中会由于缺失一些库而报错,直接百度,然后安装即可
可能遇到的问题及其解决方式:
【1】编译找不到openssl/ssl.h
【解决方法】——安装openssl
sudo apt-get install libssl-dev
【2】编译过程找不到ares.h
sudo apt-get install libc-ares-dev
【3】编译过程找不到uuid/uuid.h
sudo apt-get install uuid-dev
【4】使用过程中找不到libmosquitto.so.1
error 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++
step5.程序安装位置:
step6.本机测试
打开一个终端,执行以下命令订阅主题"mqtt"
$mosquitto_sub -h localhost -t "mqtt"-v
打开另外一个终端,发布消息到主题 “mqtt”
$mosquitto_pub -h localhost -t "mqtt"-m "Hello MQTT"
现在你会看到消息被显示在前一个终端上了.
step7. 网络测试(test.mosquitto.org)
从test.mosquitto.org订阅所有主题,任何人发布的任何消息你都可以收到,你会看到大量有趣消息滚动在你的屏幕上。
你也可以发布一些有趣的消息,所有订阅的人也同样会收到。
$mosquitto_sub -h test.mosquitto.org -t "#" -v
当然,你也可以只订阅特定主题,用来接收你自己的消息
$mosquitto_sub -h test.mosquitto.org -t "msg_only_from_sgks" -v
在另外一个终端上发布消息到特定主题,消息"My cat is Luna"应该会显示在上一个终端上
$mosquitto_pub -h test.mosquitto.org -t "msg_only_from_sgks" -m "My cat is Luna"
1.2方法二:在Ubuntu下使用apt-get安装
step 1. 引入mosquitto仓库并更新
$sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
$sudo apt-get update
step 2. 执行以下命令安装mosquitto包
$sudo apt-get installmosquitto
step 3. 安装mosquitto开发包
$sudo apt-get installlibmosquitto-dev
step 4. 安装mosquitto客户端
$sudo apt-get installmosquitto-clients
step 5. 查询mosquitto是否正确运行
$sudo service mosquitto status
step 6. 本机测试
打开一个终端,执行以下命令订阅主题"mqtt"
$mosquitto_sub -h localhost -t "mqtt"-v
打开另外一个终端,发布消息到主题 “mqtt”
$mosquitto_pub -h localhost -t "mqtt"-m "Hello MQTT"
现在你会看到消息被显示在前一个终端上了.
step 7. 网络测试(test.mosquitto.org)
从test.mosquitto.org订阅所有主题,任何人发布的任何消息你都可以收到,你会看到大量有趣消息滚动在你的屏幕上。
你也可以发布一些有趣的消息,所有订阅的人也同样会收到。
$mosquitto_sub -h test.mosquitto.org -t "#" -v
当然,你也可以只订阅特定主题,用来接收你自己的消息
$mosquitto_sub -h test.mosquitto.org -t "msg_only_from_sgks" -v
在另外一个终端上发布消息到特定主题,消息"My cat is Luna"应该会显示在上一个终端上
$mosquitto_pub -h test.mosquitto.org -t "msg_only_from_sgks" -m "My cat is Luna"
第 2 章 配置单/双向认证
2.1 生成证书
使用如下shell 来生成证书:
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the axTLS project nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#
# Generate the certificates and keys for testing.
#
PROJECT_NAME="TLS Project"
# Generate the openssl configuration files.
cat > ca_cert.conf << EOF
[ req ]
distinguished_name = req_distinguished_name
prompt = no
[ req_distinguished_name ]
O = $PROJECT_NAME Dodgy Certificate Authority
EOF
cat > server_cert.conf << EOF
[ req ]
distinguished_name = req_distinguished_name
prompt = no
[ req_distinguished_name ]
O = $PROJECT_NAME
CN = 192.168.111.100
EOF
cat > client_cert.conf << EOF
[ req ]
distinguished_name = req_distinguished_name
prompt = no
[ req_distinguished_name ]
O = $PROJECT_NAME Device Certificate
CN = 192.168.111.101
EOF
mkdir ca
mkdir server
mkdir client
mkdir certDER
# private key generation
openssl genrsa -out ca.key
openssl genrsa -out server.key
openssl genrsa -out client.key
# cert requests
openssl req -out ca.req -key ca.key -new \
-config ./ca_cert.conf
openssl req -out server.req -key server.key -new \
-config ./server_cert.conf
openssl req -out client.req -key client.key -new \
-config ./client_cert.conf
# generate the actual certs.
openssl x509 -req -in ca.req -out ca.crt \
-sha1 -days -signkey ca.key
openssl x509 -req -in server.req -out server.crt \
-sha1 -CAcreateserial -days \
-CA ca.crt -CAkey ca.key
openssl x509 -req -in client.req -out client.crt \
-sha1 -CAcreateserial -days \
-CA ca.crt -CAkey ca.key
openssl x509 -in ca.crt -outform DER -out ca.der
openssl x509 -in server.crt -outform DER -out server.der
openssl x509 -in client.crt -outform DER -out client.der
mv ca.crt ca.key ca/
mv server.crt server.key server/
mv client.crt client.key client/
mv ca.der server.der client.der certDER/
rm *.conf
rm *.req
rm *.srl
将上述代码保存为makefile.sh
做如下修改,终端执行。
- 修改 CN 域中 IP 地址为你主机/设备的 IP 地址
- [可选]加密位数 1024 修改为你需要的加密位数
2.2 CA校验证书测试
进行如下测试,以验证证书是否可用:
$openssl verify -CAfile ca/ca.crt server/server.crt
$openssl verify -CAfile ca/ca.crt client/client.crt
结果如下:
2.3 配置单/双向认证
step 1.进入配置文件
sudo vim /etc/mosquitto/mosquitto.conf
step 2.找到 Default listener,在该栏下进行如下配置
再找到Certificate based SSL/TLS support字段.
即:
|
port 8883 cafile /etc/mosquitto/CA/ca.crt certfile /etc/mosquitto/CA/server/server.crt keyfile /etc/mosquitto/CA/server/server.key require_certificate true use_identity_as_username true |
根据自己路径不同配置校验文件路径,笔者是把文件放在/etc/mosquitto/CA/下
注意!!!
根据单向认证和双向认证需要,可能需修改的字段有:
a) port 8883 // MQTT服务器将选择此端口 listen
b) cafile /etc/mosquitto/CA/ca.crt
双向认证必须配置为你的CA证书
单向认证(通常认为是client校验server证书,下同)可选配置
单向认证中,server 和 client 端 ca 配置必须保持一致。即 server 若配置 ca.crt ,则 client 必须配置 ca.crt, server 不配置ca.crt ,client 也不可配置 ca.crt
路径必须为绝对路径!!!
c) certfile /etc/mosquitto/CA/server/server.crt
单项认证和双向认证都必须配置为你的server证书
d) keyfile /etc/mosquitto/CA/server/server.key
单项认证和双向认证都必须配置为你的server私钥
e) require_certificate true
单向认证需设置为 false,注释此行,默认也是 false
双向认证必须配置为true
f) use_identity_as_username true
单向认证设置为 false,注释此行,默认也是 false
双向认证通常设置为true
step 3.重启服务
mosquitto -c /etc/mosquitto/mosquitto.conf
如果提示端口被占用,先ps出mosquitto,再kill掉
ps -aux | grep "mosquitto"
kill -9 XXXXX
2.4 单双向切换
单向认证只需要注释两行即可:
#require_certificate true
#use_identity_as_username true
如下:
|
port 8883 cafile /etc/mosquitto/CA/ca/ca.crt certfile /etc/mosquitto/CA/server/server.crt keyfile /etc/mosquitto/CA/server/server.key |
2.5 同时打开单双向认证
step 1.
在先将/etc/mosquitto/mosquitto.conf 文件按2.4节配置默认打开双向认证,再找到 Extra listener字段
进行如下配置,打开另一个端口用作单向认证
step 2.
再在该字段下找到Certificate based SSL/TLS support字段
step 3.重启服务
mosquitto -c /etc/mosquitto/mosquitto.conf
如果提示端口被占用,先ps出mosquitto,再kill掉
ps -aux | grep "mosquitto"
kill -9 XXXXX
2.6 验证
step 1.进入到CA证书目录下:
step 2.双向:
终端一:订阅
mosquitto_sub -h 10.30.11.47 -p 8883 -t "mqtt/server/topic" --cafile ./ca/ca.crt --cert ./client/client.pem --key ./client/client.key &
终端二:发布
mosquitto_pub -h 10.30.11.47 -p 8883 -t "mqtt/server/topic" -m "hello,world!" --cafile ./ca/ca.crt --cert ./server/server.pem --key ./server/server.key
step 3. 单向
终端一:订阅
mosquitto_sub -h 10.30.11.47 -p 8884 -t "mqtt/server/topic" --cafile ./ca/ca.crt &
终端二:发布
mosquitto_pub -h 10.30.11.47 -p 8884 -t "mqtt/server/topic" -m " hello,world!" --cafile ./ca/ca.crt
基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证的更多相关文章
- 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证
SSL/TLS握手过程可以分成两种类型: 1)SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书.2)SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客户 ...
- mosquitto ---SSL/TLS 单向认证+双向认证
生成证书 # * Redistributions in binary form must reproduce the above copyright # notice, this list of ...
- 服务器SSL/TLS快速检测工具TLLSSLed
服务器SSL/TLS快速检测工具TLLSSLed 现在SSL和TLS被广泛应用服务器的数据加密中,如网站的HTTPS服务.所以,在渗透测试中如何快速检测服务器的SSL和TLS配置寻找安全漏洞,就显 ...
- Linux—服务器SSL/TLS快速检测工具(TLSSLed)
一.下载TLSSLed [root@localhost ~]# yum install tlssled 二.服务器SSL/TLS快速检测工具TLSSLed 现在SSL和TLS被广泛应用服务器的数据加密 ...
- 基于openssl的单向和双向认证
1.前言 最近工作涉及到https,需要修改nginx的openssl模块,引入keyless方案.关于keyless可以参考CloudFlare的官方博客: https://blog.cloudfl ...
- nginx配置ssl加密(单双向认证、部分https)
nginx配置ssl加密(单双向认证.部分https) nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番.一开始 ...
- [转帖]nginx配置ssl加密(单/双向认证、部分https)
nginx配置ssl加密(单/双向认证.部分https) https://segmentfault.com/a/1190000002866627 nginx下配置ssl本来是很简单的,无论是去认证 ...
- 六、Mosquitto 高级应用之SSL/TLS
mosquitto提供SSL支持加密的网络连接和身份验证.本章节讲述次功能的实现. 在此之前需要一些准备工作. 准本工作: 一台 Linux 服务器. 安装好 openssl (不会明白怎么安装 op ...
- 基于SSL协议的双向认证 - 双向认证 [3]
1 SSL双向认证的实现 这里是基于SSL和Tomcat配置实现的,配置方法如下: 1.1 生成CA数字证书 首先需要配置OPENSSL环境变量. 我的OPENSSL配置文件路径是“D ...
随机推荐
- 部署docker
部署和开发环境不一样,我们不需要频繁地进入到容器内部,所以一般我们会将代码和环境打包到一块,部署到服务器上 Clone 代码 将项目代码克隆到本地 git clone git@git.coding.n ...
- Ten Qualities of an Effective Team Player
If you were choosing team members for a business team in your organization, who would the best team ...
- struts2学习(3)struts2核心知识II
一.struts.xml配置: 1.分模块配置方法: 比如某个系统多个模块,我们把资产管理模块和车辆管理模块,分开,在总的struts.xml配置文件中include他们: 工程结构: struts. ...
- java http头信息
JAVA 从http请求头中获取Header信息: request.getHeader(),request.getHeaderNames(),request.getHeaders() Java获取Ht ...
- 竖屏拍照,但是sd卡中却是横屏解决方法
protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) ...
- 使用CSS3 Flexbox布局
Flexbox(中文版本可以点击这里)的布局是一个用于页面布局的全新CSS3模块功能.它可以把列表放在同一个方向(从左到右或从上到下排列),并且让这些列表能延伸到占用可用的空间.较为复杂的布局可以通过 ...
- HDU5336题解
解题思路 这题思路并不难,主要问题是,不太好编码实现(可能是本人练习不够吧),因为有个时间在里面,而且每个小水滴都同时流动,感觉好复杂的样子.比赛时,我首先想到的是DFS+时间流做参数,由于比赛时神经 ...
- 【POJ】2229 Sumsets(递推)
Sumsets Time Limit: 2000MS Memory Limit: 200000K Total Submissions: 20315 Accepted: 7930 Descrip ...
- Druid.io系列(四):索引过程分析
原文链接: https://blog.csdn.net/njpjsoftdev/article/details/52956083 Druid底层不保存原始数据,而是借鉴了Apache Lucene.A ...
- 0CTF题中的神奇宝贝WP
前言: 今天被尘少拉去做题 然后做到一个脑洞打开的题..... 神奇宝贝!?!? 正文: 一开始来到这=-= 弱密码猜测:admin admin 验证码用calc去算 然后成功进入 第一次去做神奇宝贝 ...