Mqtt Broker部署方法

Mosquitto Broker部署

本机测试(指的是在自己电脑部署broker和使用客户端的情况):需要将所有证书签名common-name设置成自己本机的IP。
客户使用:需要使用本机IP设置签名证书的请求common-name
说明:一般情况下,提示SSL失败的情况,基本都是秘钥和证书生成的问题。遇到这种情况,可以尝试重新生成证书请求文件,使用本机的IP添写证书请求文件的conmmon-name进行调试。

一、mosquitto安装

  • 官网下载源码:http://mosquitto.org/download/
  • 执行: make
  • 执行: sudo make install

可能遇到的问题

  • 可能提示uuid问题,需要安装uuid-dev;
sudo apt install uuid-dev

如果提示错误,可能是库版本高导致,这时需要降级安装。使用aptitude安装
sudo aptitude install uuid-dev(没有安装aptitude,需要先安装:sudo apt-get install aptitude)
1 第一次提示依旧在高版本的依赖库环境下安装,这时应该选择  否;
2 第二次提示降级安装,选择继续
  • 可能提示ares错误,需要安装libc-ares-dev
sudo apt-get install libc-ares-dev
  • 运行的时候可能提示不能加载动态库
sudo echo "/usr/local/lib" >> /etc/ld.so.conf 
sudo ldconfig

二、mosquitto broker配置

2.1. 添加用户名和密码

参考手册:http://mosquitto.org/man/mosquitto_passwd-1.html

cd /etc/mosquitto
首次添加用户:sudo mosquitto_passwd -c password.file username
添加多用户:sudo mosquitto_passwd -b password.file username password

2.2. 添加SSL认证机制支持

参考手册:http://mosquitto.org/man/mosquitto-tls-7.html

  • 生成一个自签名的CA秘钥和证书
    注意签名证书的common-name 必须为公网IP,否则客户端连接broker的时候,会提示SSL错误。同时在为其他用户签署证书时,签名信息应该尽量不一致,否则会造成信息混淆
openssl req -new -x509 -days 1000 -extensions v3_ca -keyout ca.key -out ca.crt
  • 为broker生成一个服务端的秘钥和证书
1. 生成Server秘钥:
   openssl genrsa -out server.key 2048
2. 生成一个签名证书请求文件,用于给CA签名生成Server证书
   openssl req -out server.csr -key server.key -new
3. 将请求文件提交给CA,生成server证书
  openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 1000
  • 配置mosquitto.conf.sample
    在该配置文件开始部分添加以下信息:
#====================myconfig=================
#==================配置文件路径可以自己定义=======
#=============================================
retry_interval 20
port 8883
#tls_version tlsv1.0
password_file /etc/mosquitto/password.file
cafile /etc/mosquitto/ca.crt
certfile /etc/mosquitto/server.crt
keyfile /etc/mosquitto/server.key

2.3. 生效broker配置

指令参考手册:http://mosquitto.org/man/mosquitto-8.html

mosquitto -v -c /etc/mosquitto/mosquitto.conf.example

三、Mqtt的客户端

此客户端指的是Mqtt Broker为之服务的客户,需要用户自己操作。并将生成的文件提交Broker运维工作人员进行签名,最后使用运维人员反馈回的文件连接Broker。
客户端通过SSL连接broker,有两种连接方式:单向认证和双向认证;为了能连接成功broker,需要属于客户端自己的秘钥和被CA签名的证书,不同的客户端的证书是不一样的。

3.1. client生成秘钥和证书(指导客户操作1和2步骤)

1. 生成client秘钥
   openssl genrsa -out client.key 2048
2. 生成一个签名证书请求文件,用于给CA签名生成client证书
   openssl req -out client.csr -key client.key -new
3. 将客户端的请求文件给Mqtt Broker的运维人员。运维人员使用CA签名该客户端证书,最后运维人员反馈给客户ca.crt证书和client.crt
   openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 1000

3.2. 连接broker

参照手册:发布http://mosquitto.org/man/mosquitto_pub-1.html
参照手册:订阅http://mosquitto.org/man/mosquitto_sub-1.html

***单向认证连接***
订阅:mosquitto_sub -h 192.168.1.38 -p 8883 -u develop -P 666666 --cafile ./ca.crt -v -t #
发布:mosquitto_pub -h 192.168.1.38 -p 8883 -u develop -P 666666 --cafile ./ca.crt -t topic -m "hello world"

***双向认证连接***
订阅:mosquitto_sub -h 192.168.1.38 -p 8883 -u develop -P 666666 -i mosquitto_test --cafile ./ca.crt --cert ./client.crt --key ./client.key -v -t #
发布:mosquitto_pub -h 192.168.1.38 -p 8883 -u develop -P 666666 --cafile ./ca.crt --cert ./client.crt --key ./client.key -t topic -m "hello world"

四、使用supervisor方式部署mosquittto broker

  • 首先需要将秘钥文件放到/etc/mosquitto/路径下,包括:server.key,server.crt,ca.crt
  • 然后为mosquitto的日志文件建立目录,比如:mdkir -p ~/mosquitto/supervisor_log
  • 参照《supervisor部署》部署broker,其中注意mosquitto.conf相应字段路径的修改。

你可能感兴趣的:(MQTT,mqtt,mosquitto,broker部署,linux)