Mosquitto服务器的搭建以及SSL/TLS安全通信配置

Mosquitto服务器的搭建以及SSL/TLS安全通信配置

摘自:https://segmentfault.com/a/1190000005079300

8k 次阅读  ·  读完需要 22 分钟

0

1、 SSL简介

SSL(SecureSocket Layer)安全套接层,是网景公司提出的用于保证Server与client之间安全通信的一种协议,该协议位于TCP/IP协议与各应用层协议之间,即SSL独立于各应用层协议,因此各应用层协议可以透明地调用SSL来保证自身传输的安全性,SSL与TCP/IP协议及其其他应用层协议之间的关系如图1所示。

图1 SSL/TLS协议与应用层协议及tcp/ip层协议的关系

目前,SSL被大量应用于http的安全通信中,MQTT协议与http协议同样属于应用层协议,因此也可以像http协议一样使用ssl为自己的通信提供安全保证。

SSL与TLS(Transport LayerSecurity Protocol)之间的关系:
TLS(TransportLayer Security,传输层安全协议)是IETF(InternetEngineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。

开源的算法Openssl对SSL以及TLS1.0都能提供较好的支持,因此,后面使用mosquitto时也采用Openssl作为SSL的实现。

2、 Openssl安装与常用命令说明

2.1、安装
在ubuntu14.04上安装Openssl的命令如下:

apt-get install openssl-devel

注意在安装的时候要安装“openssl-devel”,而不是“openssl”。
安装成功之后可以使用如下命令查看openssl的版本:

w@w:~$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

2 Mosquito使用ssl功能的具体操作方法

将使用:A【cddserver2】(172.18.206.221)B【cddserver3】(172.18.195.182)C【cddserver1】(172.18.205.63)这三台机子,其中使用A制作CA证书B作为服务器端上运行mosquitto实例在C上运行一个订阅端,一个发布端。

2.1、产生CA的key和证书文件
使用命令为:

openssl req -new -x509 -days 36500-extensions v3_ca -keyout ca.key -out ca.crt

该命令将为CA产生一个名字为“ca.key”的key文件和一个名字为“ca.crt”的证书文件,这个crt就是CA自己给自己签名的证书文件。

该命令中选项“-x509”表示该条命令将产生自签名的证书,一般都是测试的时候采用。

命令执行过程中将需要输入国别、省份(或州)、市、Common Name等参数,其中最需要注意的是” Common Name”这个参数,它必须是当前机子的IP地址,使用主机名不行。如下截图所示

特别要注意的是Common Name参数需要填写主机的IP地址,使用主机名不行。
本步结束即产生自己的CA,它有两个文件“ca.key“和”ca.crt“:

2.2、使用自己产生的CA为server签发证书
将3.1中产生的CA文件拷贝mosquitto server所在机子上(其主机名字为cddserver3)的某个位置,例如:/home/lvhao/w/ssl,然后使用该CA为server产生证书文件。如下截图所示:


图2-3

(1)产生密钥文件server.key,为了减少测试过程中总是提出输入密码的麻烦,这里将为server产生一个不加密的密钥文件。过程如下截图所示:
该命令将产生一个不加密的RSA私钥,其中参数“2048”表示私钥的长度,这里产生的私钥文件“server.key”将在下一步使用,同时在mosquitto程序的配置文件中也需要使用。
opensslgenrsa -out server.key 2048

图2-4

如果需要为产生的RSA私钥加密,则需加上选项“-des3”,对私钥文件加密之后,后续使用该密钥的时候都要求输入密码。产生加密RSA私钥文件的命令如下:

opensslgenrsa -des3 -out server.key 2048

如果为RSA私钥文件加密了,则一定要记好密码,后面产生csr文件时以及后续使用该私钥文件都会用到该密码。

(2)产生证书签发的请求文件server.csr。过程如下截图所示:
该命令将使用上一步产生的“server.key”文件为server产生一个签发证书所需要的请求文件:server.csr,使用该文件向CA发送请求才会得到CA签发的证书。

opensslreq -out server.csr -key server.key -new

图2-5

同样该过程需要注意Common Name参数需要填写当前主机的IP地址。

(3)为mosquitto server产生证书文件:server.crt,这一步将需要输入CA的密码,同样,这里也可以看到刚才为CA输入的参数国别、省份等参数,过程如下截图所示:

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

该命令将使用CA的密钥文件ca.key,CA的证书文件ca.crt和上一步为mosquitto server产生证书请求文件server.csr文件这三个文件向CA请求产生一个证书文件,证书文件的名字为:server.crt。该命令中的36500可以修改为自己定义的时间值。

图2-6

2.3、使用自己产生的CA为client签发证书该过程与3.2类似。
首先,将3.1中产生的CA文件拷贝mosquittoclient所在机子C(其主机名字为cddserver1)上的某个位置,例如:/home/lvhao/w/ssl,然后使用该CA为server产生证书文件。如下截图所示:


图2-7
(1) 产生密钥文件client.key,过程如下截图所示:

openssl genrsa-out client.key 2048

(2) 产生一个签发证书的请求文件"client.csr "

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

产生证书请求文件时需要第一步产生的私钥文件client.key作为输入。

(3) CA为mosquitto客户端产生一个证书文件”client.crt”

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

2.4、修改mosquitto配置文件
为了使用SSL功能Mosquito的配置文件mosquitto.conf需要修改以下四个地方:
(1) port 参数,mosquitto官方网站建议在使用功能的时候使用8883端口,如下所示:

(2) 修改cafile参数,该参数表示CA的证书文件的位置,需将其设置为正确的位置,例如下图所示

2.5、运行程序
(1)启动mosquitto server端【机器B】
使用修改后的配置文件启动mosquitto程序,上面修改的配置文件的路径,在mosquitto目录下,因此需要用-c参数指定其位置,如下图所示:

(2)启动订阅端【机器C】:
订阅端所在ssl文件的路径为:/home/jason.hou/ssl,启动时所使用的命令为:

./mosquitto_sub -h 172.18.195.182 -i 111 -p 8883 -t "111" --cafile /home/lvhao/w/ssl/ca.crt --cert /home/lvhao/w/ssl/client.crt --key /home/lvhao/w/ssl/client.key

如下图所示:

(4)启动发布端【机器C】
启动时所使用的命令为:

./mosquitto_pub -h 172.18.195.182 -p 8883 -t "111" -m "this is w show"--cafile /home/lvhao/w/ssl/ca.crt --cert /home/lvhao/w/ssl/client.crt --key /home/lvhao/w/ssl/client.key

如下图所示:

(5) 发布消息之后,mosquitto、订阅端、发布端的截图如下:
Mosquito:

发布端【机器C】:

订阅端【机器C】:

1、 注意事项
(1) 制作签发证书的请求文件时,需要输入Common Name参数,此参数一定为当前主机的IP地址,否则将会显示证书错误。
(2) 如果不想SSL在身份认证的时候检查主机名(也即上面不检查第1条中Common Name参数),则需要在启动订阅端的时候,加上“--insecure”参数,例如:
./mosquitto_sub-h 192.168.4.223 -i 111 -p 8883 -t "111" --cafile/home/jason.hou/ssl/ca.crt --cert /home/jason.hou/ssl/client.crt --key/home/jason.hou/ssl/client.key --insecure
(3) 自测过程中,server端与所有客户端所使用的证书必须由一个CA签发,否则,将会提示CA不识别的问题。

3 Mosquitto的安装:

见网址:
http://blog.csdn.net/xukai871...

3.1 安装
下载源代码包

wget http://mosquitto.org/files/source/mosquitto-1.4.10.tar.gz

解压

tar zxfv mosquitto-1.4.5.tar.gz

进入目录

cd mosquitto-1.4.10

编译

make

安装

sudo make install

3.2 安装注意点

【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++

3.2 简单测试

一个完整的MQTT示例包括一个代理器,一个发布者和一个订阅者。测试分为以下几个步骤:

【1】启动服务mosquitto。
【2】订阅者通过mosquitto_sub订阅指定主题的消息。
【3】发布者通过mosquitto_pub发布指定主题的消息。
【4】代理服务器把该主题的消息推送到订阅者。

【测试说明】
测试环境:ubuntu 14.04 虚拟机
在本例中,发布者、代理和订阅者均为localhsot,但是在实际的情况下三种并不是同一个设备,在mosquitto中可通过-h(--host)设置主机名称(hostname)。为了实现这个简单的测试案例,需要在linux中打开三个控制台,分别代表代理服务器、发布者和订阅者。

3.2.1 启动代理服务

mosquitto -v

【-v】打印更多的调试信息

3.2.2 订阅主题

mosquitto_sub -v -t sensor

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

3.2.3 发布内容

mosquitto_pub -t sensor -m 12

【-t】指定主题
【-m】指定消息内容

3.2.4 运行结果
当发布者推送消息之后,订阅者获得以下内容

sensor 12

而代理服务器控制台中会出现——连接、消息发布和心跳等调试信息。通过代理服务器的调试输出可以对MQTT协议的相关过程有所了解。

4 总结

服务器Apollo与Mosquitto的对比。

原文地址:https://www.cnblogs.com/LiuYanYGZ/p/10405689.html

时间: 2024-08-09 15:12:25

Mosquitto服务器的搭建以及SSL/TLS安全通信配置的相关文章

ftp服务器的搭建和匿名用户的配置

1.ftp服务器的搭建创建挂载点挂载光盘到挂载点配置yum源清除YUM缓存关闭防火墙下载ftp安装vsftpd2.匿名用户的配置 原文地址:http://blog.51cto.com/13956236/2171383

Windows环境下搭建MosQuitto服务器

Windows环境下搭建MosQuitto服务器 2018年04月16日 22:00:01 wistronpj 阅读数:1185 摘自:https://blog.csdn.net/pjlxm/article/details/79967322 Windows环境下搭建MosQuitto服务器 原创 2016年12月06日 19:51:55 标签: mosquitto / windows 7537 MosQuitto服务器的搭建 官网地址 Windows环境下搭建服务器 参考文章: [移动] Mos

SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常

转载自http://blog.csdn.net/taiyangdao/article/details/54707184 一.SSL/TLS的Handshake过程 在SSL/TLS的Handshake过程中,客户端与服务器之间需要交换参数,具体过程如下: 客户端提供其所支持的各种cipher suites(包含加密算法和Hash函数) 服务器从中选择自己也支持的cipher suite,并通知客户端,表明两者将以此进行数据传输 服务器同时将自己的数字证书(包括服务器名称.CA和公钥)作为标识符发

MsSQL使用加密连接SSL/TLS

说明 应用程序通过未加密的通道与数据库服务器通信, 这可能会造成重大的安全风险.在这种情况下, 攻击者可以修改用户输入的数据, 甚至对数据库服务器执行任意 SQL 命令. 例如,当您使用以下连接字符串时,就可能存在这种风险: <connectionStrings> <add name="Test" connectionString="Data Source=210.10.20.10,1433; Initial Catalog=myDataBase;User

NFS文件共享服务器的搭建

需求: 在多个不同机器上部署同一个tomcat做服务器负载均衡(nginx),每个tomcat实例都有上传静态自己的功能(比如图片).但是对外访问的时候,需要一个统一的出口.所以这里使用NFS文件共享服务. 搭建过程如下: NFS文件共享服务搭建 1.环境: NFS服务器地址:192.168.0.100 tomcat1地址:192.168.0.101 tomcat2地址:192.168.0.102 2.安装NFS服务器(192.168.0.100): sudo apt-get install n

基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证

基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证 摘自:https://blog.csdn.net/ty1121466568/article/details/81118468 2018年07月19日 16:51:57 曾来过 阅读数:1632 本文为参考网上其他博文搭建出服务器后的步骤记录,如有冒犯,请私信!!! 目录... 3 第 1 章 安装Mosquitto. 4 1.1 方法一:手动编译安装... 4 1.2方法二:在Ubuntu下使用apt-get安装..

五、Mosquitto 高级应用之SSL/TLS

mosquitto提供SSL支持加密的网络连接和身份验证.本章节讲述次功能的实现. 在此之前需要一些准备工作. 准本工作: 一台 Linux 服务器. 安装好 openssl (不会明白怎么安装 openssl 的可以在网上搜索下. 我就不在这讲解了) 准本工作完成后我们开始来制作所需要的证书. 注:在生成证书过程 在需要输入 [Common Name ] 参数的地方 输入主机ip 一.Certificate Authority Generate a certificate authority

vsftpd结合ssl/tls来实现安全通信功能

vsftpd+ssl/tls实现安全通信功能 在之前的文章中说过ftp是以明文方式来进行传输的,因此很容易被人获取到账号和密码.为了实现ftp安全的传输功能,我们需要借助ssl/tls来实现安全通信功能.当然实现ftp的安全通信方式有2种: 一种是借助ssl/tls来实现的 另一种是是通过ssh+ftp的方式来实现的 在这里我们只介绍如何通过ssl/tls来实现ftp的安全通信功能 实现步骤如下: 要使用ssl/tls功能,必须要先安装mod_ssl这个模块 使用yum -y install m

Mosquitto搭建Android推送服务(四)Mosquitto服务器用户登录与权限配置

文章钢要: 1.对服务器进行多用户配置 2.根据不同用户给予不同权限 一.Mosquitto的用户机制 mosquitto中可以添加多个用户,只有使用用户名和密码登陆服务器才允许用户进行订阅与发布操作.可以说用户机制是mosquitto重要的安全机制,增强服务器的安全性. 用户与权限配置需要修改3处地方: 1.mosquitto中最最最重要的配置文件mosquitto.conf. 2.pwfile.example (保存用户名与密码) 3.aclfile.example (保存权限配置) 首先给