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

配置Mosquitto MQTT服务器:验证用户名与客户端证书CN匹配

解决方案:Mosquitto 校验用户名与客户端证书CN匹配

默认配置use_identity_as_username=true的问题在于,它会直接将证书CN作为用户名使用,完全忽略客户端连接时发送的用户名字段,因此无法实现「用户名必须与CN匹配」的校验逻辑。要实现你的需求,需要借助Mosquitto的认证插件。

方法一:使用 mosquitto-auth-plug 插件(推荐)

这是Mosquitto生态中最常用的认证扩展插件,支持证书CN与用户名的一致性校验。

配置步骤:

  1. 确保已安装mosquitto-auth-plug(可通过包管理器或源码编译安装)。
  2. 在mosquitto.conf中添加以下配置:
    # 强制要求客户端提供证书
    require_certificate true
    # 配置CA证书路径,用于验证客户端证书有效性
    cafile /path/to/your/ca.crt
    # 代理自身的证书和密钥
    certfile /path/to/your/server.crt
    keyfile /path/to/your/server.key
    # 启用auth-plug插件
    plugin /usr/lib/mosquitto-auth-plug.so
    # 指定认证后端为证书校验
    plugin_opt_auth_backends cert
    # 开启「用户名必须与证书CN匹配」的校验
    plugin_opt_cert_verify_username true
    

效果:

  • 客户端必须同时提供有效证书和用户名。
  • 只有当用户名与证书中的CN完全一致时,连接才会被允许;否则会被拒绝。

方法二:自定义Lua脚本插件

如果你有Lua开发能力,可以通过Mosquitto的Lua插件实现自定义校验逻辑,灵活性更高。

配置步骤:

  1. 确保Mosquitto已启用Lua插件支持(部分发行版需单独安装mosquitto-lua包)。
  2. 创建认证脚本auth.lua,内容如下:
    function auth_check(clientid, username, password)
        -- 获取客户端证书的CN字段
        local cert_cn = mosquitto.get_cert_cn(clientid)
        -- 无证书直接拒绝
        if cert_cn == nil then
            return false
        end
        -- 校验用户名与CN是否一致
        return username == cert_cn
    end
    
  3. 在mosquitto.conf中添加配置:
    require_certificate true
    cafile /path/to/your/ca.crt
    certfile /path/to/your/server.crt
    keyfile /path/to/your/server.key
    # 启用Lua插件
    plugin /usr/lib/mosquitto_lua.so
    # 指定认证脚本路径
    plugin_opt_lua_script /path/to/your/auth.lua
    

测试验证

使用mosquitto_sub工具测试:

# 正确案例:用户名与证书CN一致
mosquitto_sub -h localhost -p 8883 -t "test/topic" -u "your-cert-cn" --cafile ca.crt --cert client.crt --key client.key

# 错误案例:用户名与证书CN不匹配(会被拒绝连接)
mosquitto_sub -h localhost -p 8883 -t "test/topic" -u "wrong-name" --cafile ca.crt --cert client.crt --key client.key

内容的提问来源于stack exchange,提问作者Amogh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:07:24