证书在 mosquitto 中的配置

文章目录

  • 第一部分: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同此作用。

命令窗口中输入以上命令

证书在 mosquitto 中的配置_第1张图片
注意:

  • Common Name 项可填写 主机名,域名或IP 三选一。(本文样例中填写的是主机名 admin)
  • 后面用mosquitto命令订阅或发布时候的 -h 参数需要和此处Common Name填写对应,否则可能会出现证书认证失败,无法订阅或发布。
  • 其它一些参数可忽略。

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

证书在 mosquitto 中的配置_第2张图片

第二步:创建服务端证书

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

openssl genrsa -out server.key 2048
证书在 mosquitto 中的配置_第3张图片

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

openssl req -out server.csr -key server.key -new
证书在 mosquitto 中的配置_第4张图片

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

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 100
在这里插入图片描述

创建完成后可以在目录中发现服务端证书相关文件

证书在 mosquitto 中的配置_第5张图片
注意

  • 和服务端证书一样,需要注意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 中的配置_第6张图片


第二部分:证书在Mosquitto中的应用过程

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

单向认证

第一步:配置mosquitto.conf

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

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

第二步:单向认证测试

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

mosquitto -d -v -c mosquitto.conf

-c mosquitto.config 表示按指定的配置文件启动。如果不指定该选项,则会按照默认配置启动,以上做的配置将无效
证书在 mosquitto 中的配置_第8张图片

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

mosquitto_sub -d -v -h admin -p 8883 -t test --cafile D:\cert\demo\ca.crt
证书在 mosquitto 中的配置_第9张图片
注意:

  • -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
证书在 mosquitto 中的配置_第10张图片
此命令向主题 [test] 发送了一条消息 [hellomqtt]
下图是订阅端接收到的主题为 [test] 的消息 [hellomqtt]
在这里插入图片描述
至此,单向认证的通讯过程已完成。

双向认证

第一步:配置mosquitto_config

其它配置部分同单向认证配置,另需要额外配置以下选项。
在这里插入图片描述

第二步:双向认证测试

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

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

mosquitto -d -v -c mosquitto.conf

-c mosquitto.config 表示按指定的配置文件启动。如果不指定该选项,则会按照默认配置启动,以上做的配置将无效
证书在 mosquitto 中的配置_第11张图片

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
证书在 mosquitto 中的配置_第12张图片

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
证书在 mosquitto 中的配置_第13张图片
下图为订阅端接收的数据
在这里插入图片描述
至此,双向认证的通讯过程已完成。

总结

本章主要围绕 OpenSSL创建证书 和 Mosquitto使用证书 两部分进行阐述。
第一部分介绍了根证书,服务端证书,客户端证书如何通过OpenSSL生成,以及生成过程中需要注意的配置,尤其是Common Name选项的参数填写。
第二部分主要讲述了OpenSSL生成的证书如何在Mosquitto中应用,应用分两部分。单向认证和双向认证。
文中所有图片和数据均为在实际应用下的截图。
关于mosquitto在Windows上环境搭建请参考 mosquitto在Windows上的安装过程

由于篇幅过长,下篇再阐述C#实现一个MQTT客户端的介绍。

你可能感兴趣的:(MQTT)