You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:45:32