首页 > 编程知识 正文

怎样搭建web服务器,自建物联网服务器

时间:2023-05-03 20:44:45 阅读:28477 作者:2453

MQTT )消息队列遥测传输)是ISO标准中基于发布/订阅模式的消息协议。 这是一种发布/订阅消息协议,运行在TCP/IP协议系列中,专为硬件性能下降的远程设备或网络状况恶化而设计。

Mosquitto是一款开源消息代理软件,实现消息推送协议MQTT v3.1,支持轻量级、可发布/可订阅的消息推送模式,是目前广泛使用的低功耗传感器、手机有强大的社区支持,安装和配置方便。

本教程介绍如何安装Mosquitto并使用临时云的免费SSL证书进行加密配置。

准备

在开始本教程之前,您需要:

安装了Centos 7系统的服务器最好使用免费的模板云开发人员实验室进行实验。 服务器的域名。 可以通过浏览临时云快速添加域名解析。 本教程使用mqtt.example.com提供概述。 nano文本编辑器。 本教程自始至终使用nano。 可以使用sudo yum -y install nano命令安装或替换收藏夹文本编辑器。 步骤1,安装Mosquitto

缺省情况下,CentOS 7没有mosquitto软件包。 首先,安装一个名为Epel的附加软件包。 此存储库包含安装在CentOS、RedHat和其他企业Linux发行版上的其他软件。

使用yum软件包管理器安装epel-release软件包。

sudo yum-y安装Epel-release

此命令将Epel存储库信息添加到系统中。 -y选项在整个过程中对几个提示自动回答“是”。 现在可以安装mosquitto软件包。

sudo yum-y安装mosquitto

此软件包提供了一个简单的默认配置,让我们运行它来测试安装。

sudo systemctl start mosquitto

此外,还必须确保服务在系统重新启动时启动。

sudo systemctl enable mosquitto

现在测试一下默认的配置吧。 mosquitto包附带了MQTT客户端命令行。 使用其中一个订阅代理主题。

主题是发布和订阅消息的标签。 它们按等级排列,有sensors/outside/temp和sensors/outside/humidity。 在本教程中,您将使用简单的测试主题测试配置。

有必要制作新的终端。 创建方法很简单。 请重新打开新的终端页面,重新登录服务器。 新终端使用mosquitto_sub订阅测试主题。

mosquitto_sub -h localhost -t test

-h指定MQTT服务器的主机名。 -t是主题名称。 之所以在ENTER之后没有输出,是因为mosquitto_sub正在等待消息的到达。 切换到其他终端发布消息:

mosquitto _ pu B- h localhost-ttest-m“hello world”

mosquitto_pub选项与mosquitto_sub相同,但这次添加了-m选项来指定消息。 点击ENTER,应该看到hello world输出到其他终端。 你已经学会发送第一个MQTT信息了!

在第二个终端上按CTRL C退出mosquitto_sub。 请不要关闭其他终端哦。 稍后再测试。

步骤2、申请SSl加密证书

申请门户网站访问SSL证书管理控制台

点击【申请证书】

检查基于域名的证书模型,然后单击【确定】

2 .填写申请

q填写qcloud.com、cloud.tencent.com、demo.test.qlcoud.com等申请域名。

3.1手动DNS认证方式

默认情况下证书支持通过DNS认证,认证方法可以查看详细内容。

3.2自动DNS认证方式的选择

如果已成功将云解析平台添加到申请的域名中,则支持自动DNS认证,认证方法可以查看详细内容。

4.1提交申请后,验证身份

申请成功后,弹匣提示如下。 必须前往【证书详细信息页面】获取CName记录并添加分析。

要获取CName记录,必须尽快添加分析,然后才能由CA机构进行审计,如Tips所示。

4.2提交申请失败

遭遇下图所示弹坑的,是提交域名未通过CA机构安全审查,具体原因借鉴了安全审查失败的原因。

步骤3,设置MQTT密码

Mosquitto包含用于生成名为mosquitto_passwd的特殊密码文件的工具。 此工具提示您输入指定用户名的密码,并将结果放置在/etc/mosquitto/passwd上。

sudomosquitto _ passwd-c/etc/mosquitto/passwd Sammy

在此,您将替换默认配置式,并告诉Mosquito使用此密码文件请求登录所有连接。 首先,删除现有的mosquitto.c

onf.

sudo rm /etc/mosquitto/mosquitto.conf

现在打开一个新的空配置。

sudo nano /etc/mosquitto/mosquitto.conf

粘贴在下面。

allow_anonymous false
password_file /etc/mosquitto/passwd

allow_anonymous false将禁用所有未经身份验证的连接,并且password_file告诉Mosquitto在哪里查找用户和密码,保存并退出文件。

现在我们需要重新启动Mosquitto并测试。

sudo systemctl restart mosquitto

尝试在没有密码的情况下发布消息。

mosquitto_pub -h localhost -t “test” -m “hello world”

你应该看到被拒绝的信息:

Connection Refused: not authorised.
Error: The connection was refused.

在我们再次尝试使用密码登录之前,请再次切换到您的第二个终端窗口,并使用用户名和密码订阅“test”主题:

mosquitto_sub -h localhost -t test -u “sammy” -P “password”

现在用另一个终端使用用户名和密码发布一条消息:

mosquitto_pub -h localhost -t “test” -m “hello world” -u “sammy” -P “password”

消息应该按照步骤1执行。我们已经成功地为Mosquitto增加了密码保护。但是,我们在互联网上发送未加密的密码。接下来,我们将通过向Mosquitto添加SSL加密来修复这个问题。
第四步、配置MQTT SSL

为了启用SSL加密,我们需要告诉Mosquitto我们的加密证书存储在哪里。打开我们以前的配置文件。

sudo nano /etc/mosquitto/mosquitto.conf

在文件末尾粘贴以下内容,写下下面的内容:

. . .
listener 1883 localhost

listener 8883
certfile /etc/letsencrypt/live/mqtt.example.com/cert.pem
cafile /etc/letsencrypt/live/mqtt.example.com/chain.pem
keyfile /etc/letsencrypt/live/mqtt.example.com/privkey.pem

我们要增加两个单独的listener到配置。第一个,listener 1883 localhost,更新1883端口上的默认mqtt侦听器。1883是标准的未加密的MQTT端口。Mosquitto只将该端口绑定到localhost接口,因此无法从外部访问它。外部请求无论如何都会被防火墙阻止。

listener 8883在端口上设置加密侦听器8883端口。这是MQTT+SSL的标准端口,通常称为MQTTS。接下来的三行,certfile,cafile和keyfile,填写您在腾讯云申请到的证书地址。

保存并退出文件。

在重新启动Mosquitto以加载新配置之前,我们需要安装一个mosquitto服务文件。systemd这个文件用于确定如何运行mosquitto。在你最喜欢的编辑器里打开它。

sudo nano /etc/systemd/system/multi-user.target.wants/mosquitto.service

找一行写着User=mosquitto然后删除它,然后保存并退出该文件。

Mosquitto仍将作为mosquitto用户,但是当它第一次启动时,它将具有root特权,并自动安装您申请的SSl证书。在装载证书后,它将自动变为到mosquitto的用户。

我们需要重新加载systemd,因此它会注意到我们对服务文件所做的更改。

sudo systemctl daemon-reload

现在我们可以重新启动Mosquitto来更新设置。

sudo systemctl restart mosquitto

更新防火墙以允许连接到8883端口。

sudo firewall-cmd --permanent --add-port=8883/tcp

重新加载防火墙。

sudo firewall-cmd --reload

现在我们再次使用mosquitto_pub,和以前不同,我们需要加上几个不同的SSL选项。

mosquitto_pub -h mqtt.example.com -t test -m “hello again” -p 8883 --cafile /etc/ssl/certs/ca-bundle.crt -u “sammy” -P “password”

我们使用的是完整的主机名,而不是localhost。因为我们的ssl证书是为mqtt.example.com,如果我们尝试连接到localhost我们将得到一个错误,即主机名与证书主机名不匹配。

–cafile /etc/ssl/certs/ca-bundle.crt为mosquitto_pub启用SSL,并告诉它在哪里查找根证书。它们通常是由操作系统安装的,所以对于MacOS、Windows等来说,路径是不同的。mosquitto_pub使用根证书来验证Mosmisto服务器的证书是否已由腾讯云所签发的证书颁发机构正确地签名。重要的是要注意mosquitto_pub和mosquitto_sub如果没有此选项,将不会尝试使用ssl连接,即使您正在连接到标准的安全端口8883。

如果一切顺利,我们将看到Hello again出现在另一个mosquitto_sub终端。这意味着您的服务器已经完全设置好了!如果您希望扩展MQTT协议以使用WebSocket,则可以执行最后一步。
第五步-在WebSocket上配置MQTT(可选)

为了在Web浏览器中使用JavaScript来使用MQTT,该协议被调整为在标准WebSocket上工作。如果不需要此功能,则可以跳过此步骤。

我们需要再次打开mosquitto配置文件

sudo nano /etc/mosquitto/mosquitto.conf

在文件末尾添加以下内容:

. . .
listener 8083
protocol websockets
certfile /etc/letsencrypt/live/mqtt.example.com/cert.pem
cafile /etc/letsencrypt/live/mqtt.example.com/chain.pem
keyfile /etc/letsencrypt/live/mqtt.example.com/privkey.pem

除了端口号和协议websockets行之外,这与前一个块大致相同。MQTT在websockets上没有官方标准化端口,但8083是最常见的。

保存并退出文件,然后重新启动Mosquitto。

sudo systemctl restart mosquitto

在防火墙里打开端口8083。

sudo firewall-cmd --permanent --add-port=8083/tcp

重新载入防火墙。

sudo firewall-cmd --reload

为了测试这个功能,我们将使用一个公共的、基于浏览器的MQTT客户端。在浏览器中打开mqtt-admin (校者注:这个页面已经失效了,你可以访问:https://github.com/hobbyquaker/mqtt-admin 获取项目自己搭建服务端),您将看到以下内容:

请按以下方式填写连接信息:

协议应该是WSS(代表websocket secure)寄主应该是你的Mosquitto服务器的域名,mqtt.example.com.端口应该是8083用户应该是你的Mosquitto用户名;在这里,我们用sammy.密码应该是你选择的密码。ClientId可以保留默认值,MQTT-admin.

保存设置,mqtt-admin会连接到你的Mosquitto服务器。
结语

现在,我们已经建立了一个安全的、受密码保护的MQTT服务器,并使用了腾讯云SSL证书。这将作为一个强大和安全的消息传递平台,无论你梦想什么项目。与MQTT协议很好地工作的一些流行的软件和硬件包括:

OwnTracks一个开源的地理跟踪应用程序,你可以安装在你的手机上。OwnTracks将定期向您的MQTT服务器报告位置信息,然后您可以将其存储并显示在地图上,或者根据您的位置创建警报和激活物联网硬件。Node-RED是一个基于浏览器的图形界面,用于“连接”物联网。您可以将一个节点的输出拖到另一个节点的输入中,并可以通过筛选器、不同协议之间的信息路由到数据库,等等。MQTT得到了Node-red的很好的支持.ESP 8266是一种价格低廉的具有MQTT功能的wifi微控制器。

这些只是MQTT生态系统中几个流行的例子。外面有更多的硬件和软件来表达协议。如果您已经有了最喜欢的硬件平台或软件语言,那么它可能具有MQTT功能。让你们的“东西”互相交谈,玩得开心!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。