赞
踩
MQTT系列:(一)NodeRed+MQTTX进行mqtt的数据收发测试
MQTT系列:(二)通过EMQ X搭建本地MQTT服务器
Windows10
1)5.24.4.1 下载链接
2)下载完成之后,双击运行,一路next即可,环境变量会自动注册,在cmd里敲入perl -v,显示如下:
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
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
注意:DNS.1用来设置subjectAltName参数,客户端校验ca证书时会用到,因此在客户端采用域名连接时,需要与此保持一致
2)管理员方式打开cmd,进入到openssl.exe路径下,执行bat文件,打印信息如下:
3)最后两条指令用于验证证书是否有效,出现OK表明正确
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
}
}
3)运行
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,以及相关的一些实践内容。不足之处,还请指正!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。