Skip to content

2.How to use TLS

xukeawsl edited this page Mar 8, 2024 · 1 revision

0. 前提

确保你的编译环境安装了 openssl 及其开发库, 以 ubuntu 22.04 来说, 需要安装如下库:

sudo apt-get install openssl libssl-dev

1. 构建 and 编译

进入构建目录, 使用 Cmake 构建时通过开启 MQ_WITH_TLS 选项使能 SSL/TLS 功能

cmake -DMQ_WITH_TLS=On ..
cmake --build .

2. 配置 SSL/TLS

SSL/TLS 默认的监听端口为 8883, 你可以根据修改为其它端口, 默认使用的协议版本是主流的 TLS1.2, 你也能够修改为 TLS1.3

默认的认证模式是单向认证, 即服务器不验证客户端的身份, 只有客户端验证服务器身份, 因此你只需要在指定位置放置你的服务器私钥和证书文件即可, 如果你的私钥被密码保护也可以配置其密码。

如果你需要验证客户端身份, 可以修改配置使其支持双向认证, 这时你需要提供信任 CA 的证书文件, 如果有多个, 你可以将文件合并到一起然后填写到对应的配置项, 双向认证默认不是强制的, 也即如果客户端没有证书就不做验证, 如果你需要强制双向认证, 也可以配置当客户端没有证书时断开连接。

最后, 如果你需要增强 SSL/TLS 的安全性, mqtt-server 支持使用 Diffie-Hellman 密钥交换算法(DH), 你可以通过 openssl 来生成 dh4096.pem 文件, 可能需要一定时间, 命令如下:

openssl dhparam -out dh4096.pem 4096

3. 获取 SSL/TLS 证书

参考 EMQX 文档中的相关介绍, 其中介绍了如何生成自签 CA 证书以及服务器、客户端证书。

如果你希望为生成的服务器私钥增加密码保护, 可以使用如下命令:

openssl genrsa -des3 -out server.key 2048

如果使用单向认证, 则客户端只需要有自签 CA 证书即可, 用于验证服务器身份, 如果是双向认证, 还需要添加客户端私钥和证书, 用于服务器验证客户端身份。

Clone this wiki locally