Mosquitto为加密网络连接和身份认证提供了SSL支持。下面将介绍如何利用OpenSSL创建证书,及如何将证书应用在MQTT中
默认大家已经安装了mosquitto和OpenSSL,如未安装,请参考 mosquitto在Windows上的安装过程
前提条件:需要先安装OpenSSL,并将其添加至系统环境变量中(此步骤是为了后面命令操作方便)。如未安装,请参考上一篇 mosquitto在Windows上的安装过程
openssl req -new -x509 -days 100 -extensions v3_ca -keyout ca.key -out ca.crt
-days 100 中的100代表证书有效期为100天,根据需要进行设定。下文中服务端,客户端证书创建命令中的-days 100同此作用。
注意:
Common Name 项可填写 主机名,域名或IP 三选一。(本文样例中填写的是主机名 admin)后面用mosquitto命令订阅或发布时候的 -h 参数需要和此处Common Name填写对应,否则可能会出现证书认证失败,无法订阅或发布。其它一些参数可忽略。openssl genrsa -out server.key 2048
openssl req -out server.csr -key server.key -new
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 100
注意
和服务端证书一样,需要注意Common Name选项的填写。客户端证书的创建过程和服务端证书一样,在这里不再做详细介绍,请参考服务端证书创建。以下是应用过程中的创建命令
openssl genrsa -out client.key 2048
openssl req -out client.csr -key client.key -new
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 100
至此,证书创建完毕,所有证书如下:
Mosquitto为MQTT提供了SSL/TLS支持,我们可以用OpenSSL创建的证书来实现这一过程
一般默认端口1883,加密情况下端口为8883。为了符合这个默认规定,将端口修改为8883。(当然也可以选择不修改,需要与后续命令参数一致) 然后需要配置根证书和服务端证书路径。具体配置如下,配置的证书为第一部分用OpenSSL创建的证书
mosquitto -d -v -c mosquitto.conf
-c mosquitto.config 表示按指定的配置文件启动。如果不指定该选项,则会按照默认配置启动,以上做的配置将无效
mosquitto_sub -d -v -h admin -p 8883 -t test --cafile D:\cert\demo\ca.crt 注意:
-h admin 表示主机名称为admin,此处需要和服务端证书的Common Name一致。-p 8883 表示连接代理的端口为8883,不设置默认为1883。–cafile D:\cert\demo\ca.crt 代表证书路径。不设置则SSL/TLS会认证失败,无法连接到MQTT代理。mosquitto_pub -d -h admin -p 8883 -t test -m hellomqtt --cafile D:\cert\demo\ca.crt 此命令向主题 [test] 发送了一条消息 [hellomqtt] 下图是订阅端接收到的主题为 [test] 的消息 [hellomqtt] 至此,单向认证的通讯过程已完成。
其它配置部分同单向认证配置,另需要额外配置以下选项。
双向认证与单向认证除了配置上多了一个额外选项,还有发布和订阅需要提供客户端证书外,其它部分基本一致,所以在此不过过多介绍,详情看截图
mosquitto -d -v -c mosquitto.conf
-c mosquitto.config 表示按指定的配置文件启动。如果不指定该选项,则会按照默认配置启动,以上做的配置将无效
mosquitto_sub -d -v -h admin -p 8883 -t test --cafile D:\cert\demo\ca.crt --cert D:\cert\demo\client.crt --key D:\cert\demo\client.key
mosquitto_pub -d -h admin -p 8883 -t test -m hellomqtt --cafile D:\cert\demo\ca.crt --cert D:\cert\demo\client.crt --key D:\cert\demo\client.key 下图为订阅端接收的数据 至此,双向认证的通讯过程已完成。
本章主要围绕 OpenSSL创建证书 和 Mosquitto使用证书 两部分进行阐述。 第一部分介绍了根证书,服务端证书,客户端证书如何通过OpenSSL生成,以及生成过程中需要注意的配置,尤其是Common Name选项的参数填写。 第二部分主要讲述了OpenSSL生成的证书如何在Mosquitto中应用,应用分两部分。单向认证和双向认证。 文中所有图片和数据均为在实际应用下的截图。 关于mosquitto在Windows上环境搭建请参考 mosquitto在Windows上的安装过程
由于篇幅过长,下篇再阐述C#实现一个MQTT客户端的介绍。
</div> <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet"> </div>