当前位置:   article > 正文

MQTT系列:(三)EMQ X配置SSL/TLS,并使用MQTT X进行链接_mqttx上是怎么实现mqtts的自签认证链接的

mqttx上是怎么实现mqtts的自签认证链接的

系列文章目录

MQTT系列:(一)NodeRed+MQTTX进行mqtt的数据收发测试
MQTT系列:(二)通过EMQ X搭建本地MQTT服务器



安装环境

Windows10

一、Perl安装

1)5.24.4.1 下载链接
2)下载完成之后,双击运行,一路next即可,环境变量会自动注册,在cmd里敲入perl -v,显示如下:
在这里插入图片描述

二、OpenSSL安装

1)笔者很久之前安装过mingw,具体安装步骤可百度查询
2)打开MinGW Installation Manager,在MSYS中勾选以下组件,进行安装
在这里插入图片描述
3)安装完成之后进入到mingw 的安装目录,.\msys\1.0\bin\,可以找到openssl.exe

三、证书秘钥生成

1)openssl.exe路径下新建bat文件:

:: 生成自签名的CA key和证书
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem -subj "/C=CN/ST=ZheJiang/L=HangZhou/O=XXX/CN=app-ca-cert"
:: 生成服务器端的key和证书
openssl genrsa -out emqx.key 2048
openssl req -new -key ./emqx.key -config openssl.cnf -out emqx.csr -subj "/C=CN/ST=ZheJiang/L=HangZhou/O=XXX/CN=app-server-cert"
openssl x509 -req -in ./emqx.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out emqx.pem -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf
:: 生成客户端key和证书
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=ZheJiang/L=HangZhou/O=XXX/CN=app-client-cert"
openssl x509 -req -days 3650 -in client.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out client.pem
:: 验证证书是否有效
openssl verify -CAfile ca.pem emqx.pem
openssl verify -CAfile ca.pem client.pem
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2)拷贝msys\1.0\var\ssl\下的cnf文件到bin目录中,进入cmd,敲入执行:set OPENSSL_CONF=实际路径\openssl.cnf。并在末尾添加以下内容 ip地址根据实际情况进行选择。

[req_ext]
subjectAltName = @alt_names
[v3_req]
subjectAltName = @alt_names
[alt_names]
IP.1 = 192.168.43.6
IP.2 = 127.0.0.1
DNS.1 = BROKER_ADDRESS
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意:DNS.1用来设置subjectAltName参数,客户端校验ca证书时会用到,因此在客户端采用域名连接时,需要与此保持一致
2)管理员方式打开cmd,进入到openssl.exe路径下,执行bat文件,打印信息如下:
在这里插入图片描述
3)最后两条指令用于验证证书是否有效,出现OK表明正确

四、EMQ X加载证书

1)拷贝第三节中的ca.pem、emqx.key、emqx.pem文件到etc\certs
2)修改emqx.conf文件

listeners.ssl.default {
  bind = "0.0.0.0:8883"
  max_connections = 512000
  ssl_options {
    keyfile = "etc/certs/emqx.key"
    certfile = "etc/certs/emqx.pem"
    cacertfile = "etc/certs/ca.pem"
    verify = verify_none #单向验证 若是有双项验证则为verify_peer 下面为true
	fail_if_no_peer_cert = false
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3)运行

五、MQTTX使能SSL/TLS

1)按照下图进行设置:
在这里插入图片描述

2)如果连接不成功,注意检查证书以及秘钥的相关路径是否填写错误
3)进入emqx页面,点击 功能配置->监控器,可以看到通过8883端口有了一个设备端连接
在这里插入图片描述

异常问题处理

1)问题:执行 openssl genrsa -out ca.key 2048会提示 WARNING: can’t open config file: /z/extlib/openssl_/ssl/openssl.cnf
解决方法:笔者发现cnf文件在msys\1.0\var\ssl\内,为了方便将其拷贝到了bin文件下,然后执行:set OPENSSL_CONF=实际路径\openssl.cnf
网上有很多自己创建cnf文件的方法,其中对其都设置了COMMON参数,但不知为何bat运行之后,证书的验证无法通过(见问题3),因此采用var\ssl路径下的cnf文件。
2)问题:unable to write ‘random state’
原因:系统默认设置 RANDFILE为随机路径,导致访问权限可能不足,此处设置一个路径
解决方法:set RANDFILE=实际路径.rnd,此文件是后续生成的,因此实际路径随意填写
3)问题:验证证书时,出现 error 18 at 0 depth lookup:self signed certificate
原因:再openssl生成秘钥阶段,有一个COMMON参数,注意ca、server、client三者不能一致。
解决方法:之前的bat脚本已经规避了这个问题,但是针对网上自行创建的cnf文件,会填充COMMON参数,会导致证书验证不通过,此处没有细究。

总结

例如:以上就是今天要讲的内容,主要介绍了EMQX如何设置ssl/tls,以及相关的一些实践内容。不足之处,还请指正!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/175483
推荐阅读
相关标签
  

闽ICP备14008679号