1. 为什么你的MQTT消息需要SSL/TLS加密?
想象一下,你正在通过一个公共Wi-Fi网络,用手机App控制家里的智能灯。你发送了一条“关灯”指令,这条指令从你的手机出发,经过咖啡馆的Wi-Fi路由器,再穿越互联网,最终到达你家中的智能灯。在这个过程中,任何一个环节都可能有人“偷听”到这条明文传输的指令。更糟糕的是,攻击者甚至可以伪造一条“开灯”指令发送给你的设备。这就是为什么在物联网和任何涉及敏感数据(哪怕是简单的开关指令)的通信中,安全传输至关重要。
SSL/TLS(安全套接字层/传输层安全协议)就是为解决这个问题而生的。它就像给你的MQTT消息通道加上了一个坚固的防弹玻璃管道。具体来说,它能提供三大安全保障:
- 加密:管道里的所有内容(你的消息)都被打乱成只有通信双方才能看懂的密文,即使被截获,看到的也是一堆乱码。
- 身份验证:确保你连接的是真正的、你信任的服务器(比如你自己的EMQX服务器),而不是一个假冒的“钓鱼”服务器。这通常通过验证服务器的数字证书来实现。
- 完整性:确保消息在传输过程中没有被篡改。如果有人试图在半路修改消息内容,接收方能够立刻发现。
在MQTT的世界里,启用SSL/TLS后,连接协议会从普通的 mqtt:// 变为 mqtts://,端口也从默认的1883变为8883。这不仅仅是换个端口那么简单,而是整个通信链路安全等级的跃升。我经历过不少项目,在初期为了图省事跳过了SSL配置,结果在安全审计或实际部署到公网时被迫返工,那滋味可不好受。所以,无论你是开发测试还是生产部署,从一开始就养成使用加密连接的习惯,绝对是明智之举。
2. 准备工作:获取SSL/TLS证书
要建立SSL/TLS连接,我们首先需要“通行证”——也就是数字证书。证书主要有两种获取方式:购买受信任的证书和生成自签名证书。
对于生产环境,尤其是面向公众的服务,强烈建议从受信任的证书颁发机构(CA)如 Let‘s Encrypt(免费)、DigiCert、Sectigo 等购买或申请证书。这能确保所有主流设备和操作系统都信任你的服务器。
对于开发、测试或内部网络环境,使用自签名证书是更快捷、零成本的选择。自签名证书的加密强度与付费证书无异,只是缺少了公共CA的背书,需要客户端手动信任。下面我就手把手带你用 OpenSSL 工具生成一套用于测试的自签名证书。
首先,确保你的系统安装了 OpenSSL。然后打开终端(Linux/macOS)或命令提示符(Windows),跟着以下步骤操作:
第一步:生成根证书(CA) 根证书是整个信任链的起点,我们先用它来给自己“授权”。
# 生成一个2048位的CA私钥
openssl genrsa -out ca.key 2048
# 使用私钥生成自签名的根证书,有效期设为3650天(约10年)
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem
执行第二条命令时,会提示你输入一些信息,如国家、省份、组织名称等。对于测试,这些可以随意填写,但通用名称(Common Name)可以起个有意义的,比如 My Test CA。
第二步:生成服务器证书 我们的MQTT服务器(Broker)需要自己的证书。
# 1. 生成服务器私钥
openssl genrsa -out emqx.key 2048
# 2. 创建证书请求配置文


5794

被折叠的 条评论
为什么被折叠?



