Ubuntu AWS EC2上Mosquitto MQTT配置SSL证书报错求助
问题排查与解决步骤
1. 修复Mosquitto代理的SSL配置
你的default.conf仅配置了certfile,缺少对应私钥的配置——Mosquitto启用SSL时必须同时指定证书和私钥。修改配置如下:
allow_anonymous false password_file /etc/mosquitto/passwd #listener 1883 #NON SECURE PORT listener 1884 certfile /etc/letsencrypt/live/domain/fullchain.pem keyfile /etc/letsencrypt/live/domain/privkey.pem
添加keyfile指向Let's Encrypt生成的privkey.pem,这是代理端启用SSL的必填配置项。
2. 重启Mosquitto服务
修改配置后必须重启服务才能生效:
sudo systemctl restart mosquitto
可通过以下命令检查服务状态,确认是否正常启动:
sudo systemctl status mosquitto
若启动失败,查看日志排查具体错误:
sudo journalctl -u mosquitto -f
3. 修正客户端订阅命令的问题
第一个报错的原因
mosquitto_sub仅指定--cert但未提供--key,客户端若要提供证书(双向认证场景),必须同时传入证书和私钥。如果你的代理仅配置单向认证(仅验证服务器证书,客户端无需提供证书),则客户端无需添加--cert和--key,只需指定--cafile验证服务器证书即可。
第二个报错的可能原因
- 路径错误:
--key参数缺少开头的/,正确路径应为/etc/letsencrypt/live/domain/privkey.pem,路径错误会导致客户端无法读取私钥,进而连接失败。 - 代理未正常启动:若代理因配置错误未启动,客户端自然会被拒绝连接。
- 端口未开放:AWS EC2安全组需开放1884端口,同时Ubuntu本地防火墙也要允许该端口的TCP流量:
sudo ufw allow 1884/tcp - 未指定SSL连接参数:默认
mosquitto_sub使用非SSL连接,连接SSL端口需明确指定SSL相关参数。单向认证场景下的正确订阅命令:
若为双向认证(代理要求客户端提供证书),需同时指定正确路径的mosquitto_sub -h localhost -t "test" -u "User" -P "Pass" --cafile /etc/letsencrypt/live/domain/fullchain.pem --port 1884--cert和--key:mosquitto_sub -h localhost -t "test" -u "User" -P "Pass" --cert /etc/letsencrypt/live/domain/fullchain.pem --key /etc/letsencrypt/live/domain/privkey.pem --port 1884
4. 验证证书权限
确保Mosquitto进程能读取Let's Encrypt的证书文件,默认证书目录权限可能限制其他用户访问,执行以下命令调整权限:
sudo chown -R mosquitto:mosquitto /etc/letsencrypt/live/domain/ sudo chmod -R 750 /etc/letsencrypt/live/domain/
内容的提问来源于stack exchange,提问作者AbheshekSharma
相关产品推荐
相关产品推荐

