-
Notifications
You must be signed in to change notification settings - Fork 6
2.How to use TLS
xukeawsl edited this page Mar 8, 2024
·
1 revision
确保你的编译环境安装了 openssl
及其开发库, 以 ubuntu 22.04
来说, 需要安装如下库:
sudo apt-get install openssl libssl-dev
进入构建目录, 使用 Cmake 构建时通过开启 MQ_WITH_TLS
选项使能 SSL/TLS
功能
cmake -DMQ_WITH_TLS=On ..
cmake --build .
SSL/TLS 默认的监听端口为 8883
, 你可以根据修改为其它端口, 默认使用的协议版本是主流的 TLS1.2
, 你也能够修改为 TLS1.3
。
默认的认证模式是单向认证, 即服务器不验证客户端的身份, 只有客户端验证服务器身份, 因此你只需要在指定位置放置你的服务器私钥和证书文件即可, 如果你的私钥被密码保护也可以配置其密码。
如果你需要验证客户端身份, 可以修改配置使其支持双向认证, 这时你需要提供信任 CA 的证书文件, 如果有多个, 你可以将文件合并到一起然后填写到对应的配置项, 双向认证默认不是强制的, 也即如果客户端没有证书就不做验证, 如果你需要强制双向认证, 也可以配置当客户端没有证书时断开连接。
最后, 如果你需要增强 SSL/TLS 的安全性, mqtt-server
支持使用 Diffie-Hellman 密钥交换算法(DH), 你可以通过 openssl 来生成 dh4096.pem
文件, 可能需要一定时间, 命令如下:
openssl dhparam -out dh4096.pem 4096
参考 EMQX 文档中的相关介绍, 其中介绍了如何生成自签 CA 证书以及服务器、客户端证书。
如果你希望为生成的服务器私钥增加密码保护, 可以使用如下命令:
openssl genrsa -des3 -out server.key 2048
如果使用单向认证, 则客户端只需要有自签 CA 证书即可, 用于验证服务器身份, 如果是双向认证, 还需要添加客户端私钥和证书, 用于服务器验证客户端身份。