mosquitto 证书的配置

    技术2024-01-20  120

    文章目录

    第一部分:OpenSSL创建证书第一步:创建自签名根证书命令窗口中输入以上命令创建完成后可以在目录中看到ca证书 第二步:创建服务端证书1. 打开命令窗口,输入以下命令,创建服务端私钥 *server.key*2. 创建服务端证书请求文件 *server.csr*。该过程参数填写与根证书创建大致相同,一定要注意Common Name选项的填写。3. 创建根证书签名的服务端证书创建完成后可以在目录中发现服务端证书相关文件 第三步:创建客户端证书 第二部分:证书在Mosquitto中的应用过程单向认证第一步:配置mosquitto.conf编辑mosquitto安装目录下的配置文件mosquitto.conf 第二步:单向认证测试1. 输入以下命令,启动代理2. 输入以下命令,订阅主题3. 输入以下命令,发布主题 双向认证第一步:配置mosquitto_config第二步:双向认证测试1. 输入以下命令,启动代理2. 输入以下命令,订阅主题3. 输入以下命令,发布主题 总结

    Mosquitto为加密网络连接和身份认证提供了SSL支持。下面将介绍如何利用OpenSSL创建证书,及如何将证书应用在MQTT中

    默认大家已经安装了mosquitto和OpenSSL,如未安装,请参考 mosquitto在Windows上的安装过程


    第一部分:OpenSSL创建证书

    前提条件:需要先安装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填写对应,否则可能会出现证书认证失败,无法订阅或发布。其它一些参数可忽略。

    创建完成后可以在目录中看到ca证书

    第二步:创建服务端证书

    1. 打开命令窗口,输入以下命令,创建服务端私钥 server.key

    openssl genrsa -out server.key 2048

    2. 创建服务端证书请求文件 server.csr。该过程参数填写与根证书创建大致相同,一定要注意Common Name选项的填写。

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

    3. 创建根证书签名的服务端证书

    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中的应用过程

    Mosquitto为MQTT提供了SSL/TLS支持,我们可以用OpenSSL创建的证书来实现这一过程

    单向认证

    第一步:配置mosquitto.conf

    编辑mosquitto安装目录下的配置文件mosquitto.conf

    一般默认端口1883,加密情况下端口为8883。为了符合这个默认规定,将端口修改为8883。(当然也可以选择不修改,需要与后续命令参数一致) 然后需要配置根证书和服务端证书路径。具体配置如下,配置的证书为第一部分用OpenSSL创建的证书

    第二步:单向认证测试

    1. 输入以下命令,启动代理

    mosquitto -d -v -c mosquitto.conf

    -c mosquitto.config 表示按指定的配置文件启动。如果不指定该选项,则会按照默认配置启动,以上做的配置将无效

    2. 输入以下命令,订阅主题

    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代理。

    3. 输入以下命令,发布主题

    mosquitto_pub -d -h admin -p 8883 -t test -m hellomqtt --cafile D:\cert\demo\ca.crt 此命令向主题 [test] 发送了一条消息 [hellomqtt] 下图是订阅端接收到的主题为 [test] 的消息 [hellomqtt] 至此,单向认证的通讯过程已完成。

    双向认证

    第一步:配置mosquitto_config

    其它配置部分同单向认证配置,另需要额外配置以下选项。

    第二步:双向认证测试

    双向认证与单向认证除了配置上多了一个额外选项,还有发布和订阅需要提供客户端证书外,其它部分基本一致,所以在此不过过多介绍,详情看截图

    1. 输入以下命令,启动代理

    mosquitto -d -v -c mosquitto.conf

    -c mosquitto.config 表示按指定的配置文件启动。如果不指定该选项,则会按照默认配置启动,以上做的配置将无效

    2. 输入以下命令,订阅主题

    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

    3. 输入以下命令,发布主题

    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>
    Processed: 0.018, SQL: 9