1. mqtt第三方库支持openssl
   a, 编译openssl库(我使用的是1.0.1),在mqtt源码目录下创建openssl文件夹,并拷贝编译完成的库文件与头文件到此文件夹下。
   b, 修改mqtt(源码从git上获取https://github.com/eclipse/paho.mqtt.c.git )编译选项,PAHO_WITH_SSL,OPENSSL_SEARCH_PATH。修改后需要重新清除,重新编译。


2. mosquitto支持openssl
  a, 通过apt-get install mosquitto安装的mosquitto默认关闭了ssl相关功能
  b, 通过git(https://github.com/eclipse/mosquitto.git)重新安装编译mosquitto
  c, mosquitto 配置,启动命令mosquitto -c mosquitto.conf -v

port 8883
cafile /home/mosquitto_logs/certificate/ca/ca.crt
certfile /home/mosquitto_logs/certificate/server/server.crt
keyfile /home/mosquitto_logs/certificate/server/server.key

3. 自己创建需要的认证文件
  a, pc端安装openssl
  b, 使用generate.sh脚本创建认证文件,生成pem

# * Redistributions in binary form must reproduce the above copyright
#   notice, this list of conditions and the following disclaimer in the
#   documentation and/or other materials provided with the distribution.
# * Neither the name of the axTLS project nor the names of its
#   contributors may be used to endorse or promote products derived
#   from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
##
# Generate the certificates and keys for testing.
#PROJECT_NAME="TLS Project"# Generate the openssl configuration files.
cat > ca_cert.conf << EOF
[ req ]
distinguished_name     = req_distinguished_name
prompt                 = no[ req_distinguished_name ]O                      = $PROJECT_NAME Dodgy Certificate Authority
EOFcat > server_cert.conf << EOF
[ req ]
distinguished_name     = req_distinguished_name
prompt                 = no[ req_distinguished_name ]O                      = $PROJECT_NAMECN                     = 192.168.199.188
EOFcat > client_cert.conf << EOF
[ req ]
distinguished_name     = req_distinguished_name
prompt                 = no[ req_distinguished_name ]O                      = $PROJECT_NAME Device CertificateCN                     = 192.168.199.168
EOFmkdir ca
mkdir server
mkdir client
mkdir certDER# private key generation
openssl genrsa -out ca.key 1024
openssl genrsa -out server.key 1024
openssl genrsa -out client.key 1024# cert requests
openssl req -out ca.req -key ca.key -new \-config ./ca_cert.conf
openssl req -out server.req -key server.key -new \-config ./server_cert.conf
openssl req -out client.req -key client.key -new \-config ./client_cert.conf # generate the actual certs.
openssl x509 -req -in ca.req -out ca.crt \-sha1 -days 5000 -signkey ca.key
openssl x509 -req -in server.req -out server.crt \-sha1 -CAcreateserial -days 5000 \-CA ca.crt -CAkey ca.key
openssl x509 -req -in client.req -out client.crt \-sha1 -CAcreateserial -days 5000 \-CA ca.crt -CAkey ca.keyopenssl x509 -in ca.crt -outform DER -out ca.der
openssl x509 -in server.crt -outform DER -out server.der
openssl x509 -in client.crt -outform DER -out client.dermv ca.crt ca.key ca/
mv server.crt server.key server/
mv client.crt client.key client/mv ca.der server.der client.der certDER/rm *.conf
rm *.req
rm *.srl

c, rm_ssl.sh

rm ca/ -rf
rm certDER/ -rf
rm client/ -rf
rm server/ -rf

d, 不使用脚本生成认证文件

openssl genrsa -des3 -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
openssl genrsa -out server.key 2048
openssl req -new -out server.csr -key server.key
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3600

e, 方便统一操作,对文件目录结构操作

certificate
├── ca
│   ├── ca.crt
│   ├── ca.key
│   └── ca.srl
└── server├── server.crt├── server.csr└── server.key

4. Linux下两个终端通讯
  a, mosquitto_sub -h 192.168.199.188 -p 8883 -t echo_on --cafile ca/ca.crt --cert client/client.crt --key client/client.key
  b, mosquitto_pub -h 192.168.199.188 -p 8883 -t echo_on -m "temperature:15" --cafile ca/ca.crt --cert client/client.crt --key client/client.key
  c, 实际效果同预期一致

5. 方便抓wireshark包,Linux终端同windows mqttfx通讯
  a, linux下终端连接,参考列项4
  b, mqtt fx针对ssl的配置如下
     使用列项3中bc方法生成的认证文件如下配置


   使用列表3中de方法生成的认证文件如下配置

   c, wireshark抓包截图
  使用tsl

未使用tls

参考:https://blog.csdn.net/espressif/article/details/78541435
https://baijiahao.baidu.com/s?id=1610669918084024139&wfr=spider&for=pc

mqtt支持加密通讯相关推荐

  1. Javascript到PHP加密通讯的简单实现

    互联网上大多数网站,用户的数据都是以明文形式直接提交到后端CGI,服务器之间的访问也大都是明文传输,这样可被一些别有用心之人通过一些手段监听到.对安全性要求较高的网站,比如银行和大型企业等都会使用HT ...

  2. (JS-PHP)使用RSA算法进行加密通讯

    用户名密码明文直接POST到后端,很容易被别人从监听到.注:包括使用MD5等哈希函数处理后的数据,这里也算做明文(现在MD5爆破网站已经很多了~).对安全性要求较高的网站,比如银行和大型企业等都会使用 ...

  3. 马斯克推荐加密通讯聊天软件Signalv5.13.8跨平台国际版几何管家出品

    手机软件 - 技术教程 - 电脑软件 - 7月 15, 2021 软件介绍 Signal 是由 Signal Foundation 和 Signal Messenger LLC 开发的跨平台加密消息通 ...

  4. Signal Desktop for Mac(专业加密通讯软件)

    想要让自己聊天信息变得更加安全有隐秘性吗?Signal Desktop for Mac版是一款Macos上的专业加密通讯工具,十分安全.使用了信号协议,该协议结合了预密钥,Double Ratchet ...

  5. Macos上的专业加密通讯工具,十分安全。使用了信号协议,该协议结合了预密钥,Double Ratchet算法和3-DH握手信号。

    想要让自己聊天信息变得更加安全有隐秘性吗?Signal Desktop for Mac版是一款Macos上的专业加密通讯工具,十分安全.使用了信号协议,该协议结合了预密钥,Double Ratchet ...

  6. 浅谈客户端与服务端的加密通讯(HTTPS/AES/RSA/RequestBodyAdviceAdapter/ResponseBodyAdvice)

    目录 前言 HTTPS与SSL证书 AES对称加密 RSA非对称加密 AES + RSA 组合加密 服务端请求参数解密拦截器RequestBodyAdviceAdapter 服务端返回参数加密拦截器R ...

  7. Apache Httpd 2.2 配置CA证书,实现Https加密通讯

    什么是CA证书 关于什么是CA证书,以及如何使用Open-SSL申请和搭建CA证书,我们在之前的文章中已经有过介绍,这里不再赘述.若有疑问,可参考之前的文章. http://www.pojun.tec ...

  8. .NET+Sqlite如何支持加密

    点击上方蓝字关注我们 .NET+Sqlite如何支持加密 Sqlite SQLite 来源于公共领域 SQLite Is Public Domain. 确保代码不会受到任何专有或许可内容的污染,没有任 ...

  9. 12306加密传输_三大运营商发5G消息白皮书:短消息服务升级,支持加密传输

    4月8日,中国电信.中国移动.中国联通联合举行线上发布会,共同发布<5G消息白皮书>.<白皮书>阐述了5G消息的核心理念,明确了相关业务功能及技术需求,提出了对5G消息生态建设 ...

最新文章

  1. 后端好书阅读与推荐(续六)
  2. cpu缓冲区大小怎么设置_JAVA高薪面试必备知识点Volatile底层原理探究CPU在作怪
  3. mysql 5.6.6_Mysql下Limit注入方法(此方法仅适用于5.0.0mysql5.6.6的版本)
  4. 物理设计-数据类型的选择
  5. 数据特征分析-正太分布
  6. python文件及异常处理
  7. HTML左侧下拉列表,HTML中的下拉列表 select
  8. PHP Socket编程(转)
  9. Atom 和 Sublime Text 相比哪个好?
  10. open cv+C++错误及经验总结(十三)
  11. 内网漫游之SOCKS代理大结局
  12. db_create_file_dest
  13. RobotFramework相关
  14. set name utd8_ml utd 8机器学习数据的最新生命
  15. 光子映射光子追踪学习分享
  16. 深度学习基础知识---梯度弥散 梯度爆炸
  17. vue开发单页面应用
  18. 通过拷贝block实现system文件大量坏块恢复
  19. [管理篇]VMWare搭建Openstack——Cinder完成对云硬盘的扩容
  20. Java中将图片转为GIF(实用)

热门文章

  1. Java Swing用户登陆界面
  2. 从用友BIP 3,我看清了社会级商业创新的本质
  3. 《DISTRIBUTED PRIORITIZED EXPERIENCE REPLAY》强化学习论文笔记
  4. Hbase学习笔记(一)
  5. html中视频的封面+ueditor的视频封面
  6. 15个最佳HTML5视频播放器
  7. unicode中文 数字 英文 半角和全角判断
  8. G711编解码(G711与PCM类型互转)
  9. 《R语言实战笔记》第一章:R语言介绍
  10. 音频参数与FFMpeg转码音频