物联网架构成长之路(50)-EMQ配置SSL证书,实现MQTTs协议

0. 前言
  EMQ是带有SSL功能的,需要进行简单的配置,才能使用。下面就简单说一下如何实现自签证书。

1. 利用OpenSSL签发证书

 1 ? cat createCA.sh
 2 #/bin/sh
 3 # 生成自签名的CA key和证书
 4 openssl genrsa -out ca.key 2048
 5 openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -subj "/CN=www.wunaozai.com" -out ca.pem
 6
 7 # 生成服务器端的key和证书
 8 openssl genrsa -out server.key 2048
 9 openssl req -new -key ./server.key -out server.csr -subj "/CN=0.0.0.0"
10 openssl x509 -req -in ./server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem -days 3650 -sha256
11
12 # 生成客户端key和证书
13 openssl genrsa -out client.key 2048
14 openssl req -new -key ./client.key -out client.csr -subj "/CN=0.0.0.0"
15 openssl x509 -req -in ./client.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out client.pem -days 3650 -sha256
16
17 # 最后生成如下文件
18 ? ls
19 ca.key ca.pem ca.srl client.csr client.key client.pem createCA.sh server.csr server.key server.pem

2. 配置到EMQX的emqx.conf
  如果启用单向认证的话,客户端不需要证书都可以连接。这里的listener.ssl.external.fail_if_no_peer_cert = true 注释掉就启用单向认证。
  启用双向认证。那么客户端就必须导入CA和client的证书才可以连接。

 1 listener.ssl.external = 8883
 2 listener.ssl.external.acceptors = 16
 3 listener.ssl.external.max_connections = 102400
 4 listener.ssl.external.max_conn_rate = 500
 5 listener.ssl.external.active_n = 100
 6 listener.ssl.external.zone = external
 7 listener.ssl.external.access.1 = allow all
 8 listener.ssl.external.handshake_timeout = 15s
 9 listener.ssl.external.keyfile = ../certs/server.key
10 listener.ssl.external.certfile = ../certs/server.pem
11 listener.ssl.external.cacertfile = ../certs/ca.pem
12 listener.ssl.external.verify = verify_peer
13 listener.ssl.external.fail_if_no_peer_cert = true
14 listener.ssl.external.ciphers = ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384,ECDHE-ECDSA-AES256-SHA384,ECDHE-RSA-AES256-SHA384,ECDHE-ECDSA-DES-CBC3-SHAAES256-GCM-SHA384,ECDH-ECDSA-AES256-SHA384,ECDH-RSA-AES256-SHA384,DHE-DSS-AES256-GCM-SHA384,DHE-DSS-AES256-SHA256,AES256-GCM-SHA384,AES256-SHA256,ECDHE-ECDSA-AES128,ECDHE-ECDSA-AES128-SHA256,ECDHE-RSA-AES128-SHA256,ECDH-ECDSA-AES128-GCM-SHA256,ECDH-RSA-AES128-GCM-SHA256,ECDH-ECDSA-AES128-SHA256,ECDH-RSA-AES128-SHA256,DHE-DSS-AAES128-GCM-SHA256,AES128-SHA256,ECDHE-ECDSA-AES256-SHA,ECDHE-RSA-AES256-SHA,DHE-DSS-AES256-SHA,ECDH-ECDSA-AES256-SHA,ECDH-RSA-AES256-SHA,AES256-SHA,ECDHE-ECDSA-AES1128-SHA,ECDH-ECDSA-AES128-SHA,ECDH-RSA-AES128-SHA,AES128-SHA
15 listener.ssl.external.reuseaddr = true

  重新启动EMQX

1 ./bin/emqx stop
2 ./bin/emqx start

3. 工具测试
  可以用MQTT.fx工具测试。我这里使用EMQ官方出品的MQTTX工具。

  采用自签证书,可以签发多个client客户端的证书。可以做到一机一证。这样做的成本非常高,本身SSL加密对通信要求就高,如果还要管理那么多证书,就有点麻烦了。所以目前我采用的方式是,平台支持MQTTs通信,可以单向认证。只保证通讯安全。至于设备认证,就不通过证书认证,而是传统的设备ID与设备密码来认证。简单一点。平台改动也不大。

参考资料:
  https://docs.emqx.io/cn/sdk_tools?category=MQTT_Tools
  https://www.emqx.io/cn/downloads#broker
  https://docs.emqx.io/broker/latest/cn/config.html?highlight=ssl#mqtt-ssl-8883
  https://segmentfault.com/a/1190000020058373#item-2
  https://blog.csdn.net/u011089760/article/details/89951214

本文地址:https://www.cnblogs.com/wunaozai/p/12367497.html
本系列目录: https://www.cnblogs.com/wunaozai/p/8067577.html
个人主页:https://www.wunaozai.com/

原文地址:https://www.cnblogs.com/wunaozai/p/12367497.html

时间: 2024-08-01 14:54:24

物联网架构成长之路(50)-EMQ配置SSL证书,实现MQTTs协议的相关文章

物联网架构成长之路(5)-EMQ插件配置

1. 前言 上一小结说了插件的创建,这一节主要怎么编写代码,以及具体流程之类的.2. 增加一句Hello World 修改 ./deps/emq_plugin_wunaozai/src/emq_plugin_wunaozai.erl 增加一行Hello World 增加后,保存 1 make clean 2 make 3 cp -r ebin ../../_rel/emqttd/lib/emq_plugin_wunaozai-2.3.1 这样就把最新版本复制到_rel 目录下了. 回到eqm-r

物联网架构成长之路(4)-EMQ插件创建

1. 说明 以下用到的知识,是建立在我目前所知道的知识领域,以后如果随着知识的拓展,不一定会更新内容.由于不是EMQ公司的人,EMQ的文档又很少,很多知识点都是靠猜的.2. 一些资料 架构设计 http://emqtt.com/docs/v2/design.html 扩展插件 http://emqtt.com/docs/v2/plugins.html  一些自带的插件3. 写插件 经过上一篇博客讲解的,编译_relx后,在deps目录下就会包含了所有依赖包以及插件包,在这个目录下有个emq_pl

物联网架构成长之路(33)-EMQ数据存储到influxDB

一.前言 时隔一年半,技术变化特别快,学习也要跟上才行.以前写过EMQ数据转存问题,当时用了比较笨的方法,通过写插件的方式,把MQTT里面的数据发送到数据库进行存储.当时也是为了学习erlang和emq.现在随着对物联网的深入,也结合实际需求,不停的学习.下面将介绍我实验测试可行的物联网数据分析解决方案.采用的还是开源方案.通过订阅MQTT的根Topic,把所有物联网数据转存到InfluxDB时序数据库,然后通过Grafana进行图表显示.这应该是目前比较流行的方案.二.安装InfluxDB I

物联网架构成长之路(7)-EMQ权限验证小结

1. 前言 经过前面几小节,讲了一下插件开发,这一小节主要对一些代码和目录结构进行讲解,这些都是测试过程中一些个人经验,不一定是官方做法.而且也有可能会因为版本不一致导致差异. 2. 目录结构 这个目录结构整体就是从 emq-plugin-template 复制一份过来的,然后修改. .erlang.mk 这个是编译过程的临时文件,不用管 .git 这个是源代码版本管理,不用管 data 一些系统数据文件,不用管 deps 这个是在make编译的时候,自动下载一些依赖包,不用管 ebin 这个是

物联网架构成长之路(0)-目录

一.基础 [http://www.cnblogs.com/wunaozai/p/8067621.html] 物联网架构成长之路(1)-前言 [http://www.cnblogs.com/wunaozai/p/8075640.html] 物联网架构成长之路(2)-脚手架工具准备 [http://www.cnblogs.com/wunaozai/p/8082332.html] 物联网架构成长之路(3)-EMQ消息服务器了解

物联网架构成长之路(56)-SpringCloudGateway+JWT实现网关鉴权

0. 前言 结合前面两篇博客,前面博客实现了Gateway网关的路由功能.此时,如果每个微服务都需要一套帐号认证体系就没有必要了.可以在网关处进行权限认证.然后转发请求到后端服务.这样后面的微服务就可以直接调用,而不需要每个都单独一套鉴权体系.参考了Oauth2和JWT,发现基于微服务,使用JWT会更方便一些,所以准备集成JWT作为微服务架构的认证方式. [https://www.cnblogs.com/wunaozai/p/12512753.html] 物联网架构成长之路(54)-基于Naco

物联网架构成长之路(51)-Nacos微服务配置中心、服务注册服务发现

0.前言 之前练习微服务是用Eureka,最近发现BladeX是用的Nacos,发现Nacos还比较简单实用.所以联系一下这个,为物联网V2版本积累经验. 1. 下载.安装.启动 下载Nacos 1 https://github.com/alibaba/nacos/releases 2 https://nacos.io/zh-cn/docs/quick-start.html 解压启动 访问http://127.0.0.1:8848/nacos/index.html 默认帐号密码 nacos/na

物联网架构成长之路(11)-Redis缓存主从复制

1. 说明 在我的物联网平台框架框架中,会用到Redis这个中间件.作为EMQ权限认证的缓存.https://www.cnblogs.com/think-in-java/p/5123884.html 2. 编译&运行 1 wget http://download.redis.io/releases/redis-4.0.6.tar.gz 2 make && make test && make PREFIX=/home/user/workspace/redis inst

物联网架构成长之路(24)-Docker练习之Compose容器编排

0.前言 一开始学的之后,是想一步到位直接上Kubernetes(K8s)的,后面没想到,好像有点复杂,有些概念不是很懂.因此学习东西还是要循序渐进,慢慢来.先了解单机编排技术Docker Compose,了解一些技术细节及原理后,在入手K8s.还是不能一口吃成胖子,要多吃几口才可以.而且目前公司都是一些小项目,能用得上DockerCompose已经很不错了,还想要上K8s,估计是不现实的. 1. 安装 可以通过运行下面命令进行安装, 1 curl -L https://github.com/d