RabbitMQ MQTT插件X509认证无法识别证书CN用户名求助
RabbitMQ MQTT X509证书SSL认证失败(用户为空)排查方案
问题场景
已为RabbitMQ配置MQTT插件并启用X509证书SSL认证,配置文件如下:
mqtt.listeners.tcp.default = 0.0.0.0:1883 mqtt.listeners.ssl.default = 0.0.0.0:8883 mqtt.allow_anonymous = false mqtt.vhost = / mqtt.exchange = amq.topic mqtt.subscription_ttl = 86400000 mqtt.prefetch = 10 ssl_options.cacertfile = /certs/rootCACert.pem ssl_options.certfile = /certs/server-cert.pem ssl_options.keyfile = /certs/server-key.pem ssl_options.verify = verify_peer ssl_options.fail_if_no_peer_cert = true mqtt.ssl_cert_login = true ssl_cert_login_from = common_name
使用MQTT Explorer加载证书连接时,RabbitMQ日志输出认证失败,提示用户为空:
[error] <0.1292.0> MQTT login failed for user '', authentication failed: Refused [error] <0.1292.0> MQTT connection 172.21.0.1:37746 -> 172.21.0.4:8883 is closing due to an authentication failure
已创建与证书通用名称(CN)同名的无密码用户并赋予全部权限,账号密码登录其他账号正常。
排查与解决步骤
校验客户端证书CN与RabbitMQ用户名的一致性
确保客户端证书的CN字段和RabbitMQ中创建的用户名完全匹配(包括大小写、特殊字符)。用以下命令查看客户端证书的CN:openssl x509 -in 你的客户端证书路径.pem -text -noout | grep "Subject:"确认输出里
CN=后的内容和RabbitMQ用户名完全一致。验证客户端证书链的信任关系
客户端证书必须能被RabbitMQ配置的CA证书信任。执行以下命令验证:openssl verify -CAfile /certs/rootCACert.pem 你的客户端证书路径.pem若返回
xxx.pem: OK则信任关系正常,否则需检查证书链是否完整(比如是否缺少中间CA证书)。确认RabbitMQ的SSL登录配置已生效
通过命令行检查MQTT插件的SSL登录配置:rabbitmqctl eval 'application:get_env(rabbitmq_mqtt, ssl_cert_login).' rabbitmqctl eval 'application:get_env(rabbitmq_mqtt, ssl_cert_login_from).'确保返回结果分别为
{ok, true}和{ok, common_name},若不符需重新配置并重启RabbitMQ。检查MQTT Explorer的证书配置
在MQTT Explorer中确认:- 开启SSL/TLS选项;
- 选择「Certificate based」认证方式;
- 正确加载客户端证书、客户端私钥(确保私钥无密码,若有需在客户端输入);
- CA证书与RabbitMQ使用的
rootCACert.pem保持一致。
重新确认用户权限配置
执行命令为目标用户重新赋予/虚拟主机的全部权限:rabbitmqctl set_permissions -p / "你的用户名" ".*" ".*" ".*"开启SSL调试日志排查细节
在rabbitmq.conf中添加以下配置开启SSL调试日志:log.ssl = debug重启RabbitMQ后,查看日志中的SSL握手过程,确认客户端证书是否被正确解析,CN字段是否被正常提取。
内容的提问来源于stack exchange,提问作者aleba89
相关产品推荐
相关产品推荐

