EMQ配置SSL访问的一个坑

抉择

最近在做android方面的项目,需要用到mqtt,一开始使用超轻量的mosquitto,后来发现权限配置和集群配置比较麻烦,于是决定重新选用一款重一点的mqtt broker,看来看去看中了国产的EMQ http://www.emqtt.com 看功能介绍,那是相当的强大,全中文文档看起来也非常容易,二话不说下载安装试用,还自带WEB后台,相当舒服,于是准备在产品服务器上部署

踩坑

安装部署配置一切都顺利,下载deb包dpkg -i 安装就可以了,产品服务器,通信加密是必须的,于是配置SSL,从8883端口访问emq。
根据官方文档说明配置SSL证书http://www.emqtt.com/docs/v2/config.html#mqtt-ssl-8883

## SSL Options
listener.ssl.external.handshake_timeout = 15
listener.ssl.external.keyfile = etc/certs/key.pem
listener.ssl.external.certfile = etc/certs/cert.pem
## 开启双向认证
## listener.ssl.external.cacertfile = etc/certs/cacert.pem
## listener.ssl.external.verify = verify_peer
## listener.ssl.external.fail_if_no_peer_cert = true

我并不需要双向验证,所以根据说明,只配置了listener.ssl.external.keyfile和listener.ssl.external.certfile两个参数

listener.ssl.external.keyfile = etc/certs/xxx.com.key
listener.ssl.external.certfile = etc/certs/xxx.com.crt

分别指向了SSL证书和私钥文件,SSL证书和私钥是放在nginx一直在用的,不会有什么问题,配置后重启emq
sudo systemctl restart emqttd
尝试使用域名从8883端口访问,结果客户端抛出异常,emq服务端错误日志显示
SSL: certify: ssl_alert.erl:88:Fatal error: certificate unknown
开始还以为是证书格式不对,使用openssl进行了各种转换,依旧是这个错误,以此为关键词在网上搜索也找不到什么有用的信息

脱坑

一开始就想会不会是listener.ssl.external.cacertfile这个参数没有配置,因为文档里说要开双向验证才需要配置,另一方面我的SSL证书是花钱买的,并非自签证书,那么CA证书应该是ubuntu系统已经预置了,配置nginx之类的其它服务端,也没有遇到需要配置CA证书的情况(自签证书除外),所以一直没有去碰这个参数,最后搞了大半天才发现是这参数的问题
emq并不会自己去系统里面找CA证书,一定要手动配置才行,关键是文档里也没具体说明这一点,网上的例子也是只配置了listener.ssl.external.keyfile和listener.ssl.external.certfile这两个参数
由于我的证书文件xxx.com.crt内已经包含包括CA在内的证书链,所以这样配置即可

listener.ssl.external.keyfile = etc/certs/xxx.com.key
listener.ssl.external.certfile = etc/certs/xxx.com.crt
listener.ssl.external.cacertfile =etc/certs/xxx.com.crt

即listener.ssl.external.certfile和listener.ssl.external.cacertfile指向同一个文件
sudo systemctl restart emqttd后终于成功连接上了

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值