MQTT TLS 加密传输
MQTT TLS 加密传输
Mosquitto原生支持了TLS加密,TLS(传输层安全)是SSL(安全套接层)的新名称,生成证书后再配置一下MQTT代理,本文主要介绍Mqtt如何实现双向认证和单向认证方法。
单向认证:就是只有服务器提供证书,客户端不需要证书,双向认证:服务端和客户端都提供证书。
1.生成CA
首先我们需要生成证书权威(Certificate Authority,CA)的认证和密钥,生成过程中Common Name就是hostname,网上很多生成CA证书直接指令OpenSSl方法,没有对Common Name进行扩展,本文不是主要介绍CA生成方法,这里为方便直接采用github中的一个脚本,可以让hostname为localhost、本机ip或192.168.7.10,通过链接脚本地址运行脚本。
从OweTracks项目下载并运行generate-CA.sh脚本。该脚本创建CA文件,生成服务器证书,并使用CA来签名证书。
运行脚本
$ mkdir myca
$ cd myca
$ bash ./generate-CA.sh
generate-CA.sh会产生6个文件:ca.crt,ca.key,ca.srl,myhost.crt,myhost.csr和myhost.key。分别为: 证书(.CRT),钥匙(.KEY),请求(.csr文件),并在签名过程中的一系列记录文件(.slr),注意myhost是系统名字,也就是服务器端的文件。
其中将三个文件拷贝到/etc/mosquitto目录:
$ sudo cp ca.crt /etc/mosquitto/ca_certificates/
$ sudo cp myhost.crt myhost.key /etc/mosquitto/certs/
2.单向认证
1、配置文件/etc/mosquitto/mosquitto.conf:
# mosquitto.conf
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
port 8883
cafile /etc/mosquitto/ca_certificates/ca.crt
certfile /etc/mosquitto/certs/myhost.crt
keyfile /etc/mosquitto/certs/myhost.key
在拷贝证书文件和修改mosiquitto.conf后, 重启服务:
$ sudo service mosquitto restart
2、单向认证时客户端不需要生成客户端证书、钥匙和请求,仅需要将CA证书ca.crt,ca.key,ca.srl,拷贝到客户端系统中
客户端接收mosquitto_sub:
$ mosquitto_sub -p 8883 -t /cnc/knd/# --cafile ca.crt
客户端发布mosquitto_pub
$ mosquitto_sub -p 8883 -t /cnc/knd/# --cafile ca.crt
3.双向认证
1、若为双向认证则需根据CA证书生成客户端证书,生成客户端证书、钥匙和请求的方法是在CA证书文件夹下执行OpenSSL
$ openssl genrsa -out client.key 2048
$ openssl req -new -out client.csr -key client.key -subj "/CN=client/O=example.com"
$ openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAserial ./ca.srl -out client.crt -days 3650 -addtrust clientAuth
2、配置文件/etc/mosquitto/mosquitto.conf多一行:
require_certificate true
3、双向认证时客户端需要写入自己的证书信息和密钥来进行验证,
客户端接收mosquitto_sub:
$ mosquitto_sub -p 8883 -t /cnc/knd/# --cafile ca.crt --cert client.crt --key client.key
客户端发布mosquitto_pub
$ mosquitto_sub -p 8883 -t /cnc/knd/# --cafile ca.crt --cert client.crt --key client.key
4. 总结
可以看出双向认证一个客户端有一个自己的证书信息,这样更为安全,但每个客户端都需要安装证书也很麻烦,具体采用什么方法,还要考虑实际场合,第一次接触TLS,如有错误,还请指教。
MQTT TLS 加密传输的更多相关文章
- SSL/TLS加密传输与数字证书解读
什么是ssl? secure socket layer(ssl)协议最初由netscape企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准 ...
- OpenLDAP配置TLS加密传输
原文发表于cu:2016-07-04 参考文档: 基于OpenSSL自建CA与颁发SSL证书:http://seanlook.com/2015/01/18/openssl-self-sign-ca/ ...
- 在SuperSocket中启用TLS/SSL传输层加密
关键字: TLS, SSL, 传输层加密, 传输层安全, 证书使用, X509Certificate SuperSocket 支持传输层加密(TLS/SSL) SuperSocket 有自动的对TLS ...
- SQL Server 2008, 2008 R2, 2012 and 2014 完全支持TLS1.2加密传输
SQL Server 2008, 2008 R2, 2012 and 2014 完全支持TLS1.2加密传输 微软高兴地宣布所有主流SQL Server客户端驱动和SQL Server发行版已经支持T ...
- 09-OpenLDAP加密传输配置
OpenLDAP加密传输配置(CA服务器与openldap服务器异机) 阅读视图 环境准备 CA证书服务器搭建 OpenLDAP服务端与CA集成 OpenLDAP客户端配置 客户端测试验证 故障处理 ...
- 识别TLS加密恶意流量
利用背景流量数据(contexual flow data)识别TLS加密恶意流量 识别出加密流量中潜藏的安全威胁具有很大挑战,现已存在一些检测方法利用数据流的元数据来进行检测,包括包长度和到达间隔时间 ...
- 关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商)
关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商) 来源: https://blog.csdn.net/xueyepiaoling/article/details/6243337 ...
- 利用背景流量数据(contexual flow data) 识别TLS加密恶意流量
识别出加密流量中潜藏的安全威胁具有很大挑战,现已存在一些检测方法利用数据流的元数据来进行检测,包括包长度和到达间隔时间等.来自思科的研究人员扩展现有的检测方法提出一种新的思路(称之为“dataomni ...
- 如何为网站启用HTTPS加密传输协议
前言 当今时代对上网的安全性要求比以前更高,chrome和firefox也都大力支持网站使用HTTPS,苹果也从2017年开始在iOS 10系统中强制app使用HTTPS来传输数据,微信小程序也是要求 ...
随机推荐
- JavaScript实现弹窗报错
JavaScript实现弹窗报错 1.具体错误如下 SCRIPT 5022:cannot call methods on dialog prior to initialization; attempt ...
- iOS - IM 即时通讯
1.即时通讯技术 即时通讯(IM:Instant Messaging):又称实时通讯,支持用户在线实时交谈,允许两人或多人使用网络实时的传递文字消息.文件.语音与视频交流. 即时通讯在开发中使用的场景 ...
- monkey简介与最常用命令
1.monkey简介 monkey是SDK附带的一个用来做压力测试的工具,monkey测试所有事件都是随机发生的,不带有主观性,测试人员主要通过跑monkey后打印出来的日志分析来发现问题 2.mon ...
- 我在微信小程序遇到的坑
这段时间刚好结束一个小程序,被坑的好惨,所以罗列出来,有用的着的,就抱走吧! 1.关于音频,项目要求能在退出小程序的情况下继续播放,所以我直接用了 wx.getBackgroundAudioM ...
- [JZOJ5522] 图
题目大意: 一个有向图,图中有\(n\)个点\(m\)条边且无重边无自环, 每秒第\(i\)条边出现的概率是\(\frac{p[i]}{100}\), 一开始\(Samjia\)在\(1\)点,每一秒 ...
- 【BZOJ2243】【SDOI2011】染色(树链剖分,线段树)
题面 我们也要换个花样,这回提供洛谷的题面 题解 线段树+树链剖分大水题 维护颜色段的方法很简单呀... 维护当前区间内的颜色段个数, 以及当前区间左端和右端的颜色, 合并的时候考虑是否要减一下就行了 ...
- 【网络流24题22】最长k可重线段集问题
题面戳我 sol 千万!千万!不要理解错题意了!最长K可重,不是说线段最多K可重!你以为计算几何? 原文:使得在\(x\)轴上的任何一点\(p\),\(S\)中与直线\(x=p\)相交的开线段个数不超 ...
- java中获取项目在tomcat目录下的路径方法
HttpServletRequest request //获取的是ROOT项目在tomcat下的路径 方法1: String path = request.getSession().getServle ...
- 如何将生产环境的字段类型从INT修改为BIGINT
介绍 改变数据类型是一个看起来很简单的事情,但是如果表非常大或者有最小停机时间的要求,又该如何处理那?这里我提供一个思路来解决这个问题. 背景 在一个常规SQL Server heath检查中,使用s ...
- gulp+babel面向未来变成
1.需要本地安装node; 2.安装gulp: 3.在项目根目录启动node; 安装babel组件: npm install --save-dev babel-core npm install --s ...