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同此作用。
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
客户端证书的创建过程和服务端证书一样,在这里不再做详细介绍,请参考服务端证书创建。以下是应用过程中的创建命令
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
注意:
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客户端的介绍。