如何禁用Docker部署的RabbitMQ明文认证?配置操作指引
RabbitMQ Docker镜像禁用明文认证操作指引
前置说明
- 官方RabbitMQ镜像默认账号为
guest,默认密码guest,属于弱配置,修复时同步替换为自定义强密码即可。 - 所有配置均通过宿主机挂载文件传入容器,不需要进入容器内部修改文件,重启、升级镜像时配置不会丢失。
- 以下提供两种修复方案,可根据自身场景选择。
方案一:无证书快速修复(适合测试/内网非核心场景)
该方案无需生成/申请证书,仅通过禁用明文认证机制即可通过漏洞扫描,配置成本最低。注意该方案仅保证认证过程不传输明文密码,业务数据本身仍走明文传输,不建议核心生产环境使用。
- 在宿主机创建配置目录,例如
/data/rabbitmq/config - 在该目录下新建
rabbitmq.conf配置文件,写入以下内容:
# 监听5672默认AMQP端口 listeners.tcp.default = 0.0.0.0:5672 # 仅启用非明文的SCRAM认证机制,直接禁用PLAIN、AMQPLAIN两类明文认证 auth_mechanisms.1 = SCRAM-SHA-256 auth_mechanisms.2 = SCRAM-SHA-1 # 替换默认弱密码账号 default_user = rabbit_admin default_pass = 替换为12位以上包含大小写、数字、特殊字符的强密码 # 禁用默认guest账号的远程访问权限 loopback_users.guest = true
注意:使用该方案时,客户端连接配置需要指定认证机制为
SCRAM-SHA-256,否则会出现认证失败,目前主流语言的RabbitMQ客户端均原生支持该机制。
- 启动容器时挂载该配置文件,启动命令参考:
docker run -d \ --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ -v /data/rabbitmq/config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \ -v /data/rabbitmq/data:/var/lib/rabbitmq \ --restart always \ rabbitmq:latest
方案二:TLS全链路加密修复(适合生产/合规要求高的场景)
该方案为官方推荐的标准修复方案,认证、数据传输全程走TLS加密,彻底解决明文风险,满足等保、合规扫描要求。
- 在宿主机创建配置、证书存储目录,例如
/data/rabbitmq/config、/data/rabbitmq/certs - 执行以下命令生成自签证书(生产环境可直接替换为正规CA签发的证书),执行过程中所有提示直接回车即可:
# 生成CA私钥 openssl genrsa -out /data/rabbitmq/certs/ca_key.pem 2048 # 生成CA根证书 openssl req -x509 -new -nodes -key /data/rabbitmq/certs/ca_key.pem -sha256 -days 3650 -out /data/rabbitmq/certs/ca_cert.pem # 生成服务端私钥 openssl genrsa -out /data/rabbitmq/certs/server_key.pem 2048 # 生成服务端证书签名请求 openssl req -new -key /data/rabbitmq/certs/server_key.pem -out /data/rabbitmq/certs/server_csr.pem # 用CA签发服务端证书 openssl x509 -req -in /data/rabbitmq/certs/server_csr.pem -CA /data/rabbitmq/certs/ca_cert.pem -CAkey /data/rabbitmq/certs/ca_key.pem -CAcreateserial -out /data/rabbitmq/certs/server_cert.pem -days 3650 -sha256 # 配置目录权限,保证容器内进程可读 chmod 755 /data/rabbitmq/certs -R
- 在
/data/rabbitmq/config目录下新建rabbitmq.conf配置文件,写入以下内容:
# 如需完全禁用非加密端口,注释掉下面这行即可 # listeners.tcp.default = 0.0.0.0:5672 # 配置TLS加密AMQP端口,默认端口为5671 listeners.ssl.default = 0.0.0.0:5671 # 容器内证书路径,和后续挂载路径对应 ssl_options.cacertfile = /etc/rabbitmq/certs/ca_cert.pem ssl_options.certfile = /etc/rabbitmq/certs/server_cert.pem ssl_options.keyfile = /etc/rabbitmq/certs/server_key.pem # 仅允许安全的TLS版本,禁用老旧不安全的SSLv3、TLS1.0、TLS1.1 ssl_options.versions.1 = tlsv1.3 ssl_options.versions.2 = tlsv1.2 # 启用非明文认证机制,兼容客户端证书认证 auth_mechanisms.1 = SCRAM-SHA-256 auth_mechanisms.2 = SCRAM-SHA-1 auth_mechanisms.3 = EXTERNAL # 账号配置 default_user = rabbit_admin default_pass = 替换为12位以上包含大小写、数字、特殊字符的强密码 loopback_users.guest = true # 如需给管理界面开启HTTPS,添加以下配置 management.ssl.port = 15671 management.ssl.cacertfile = /etc/rabbitmq/certs/ca_cert.pem management.ssl.certfile = /etc/rabbitmq/certs/server_cert.pem management.ssl.keyfile = /etc/rabbitmq/certs/server_key.pem
- 启动容器时挂载配置、证书目录,端口映射对应调整,启动命令参考:
docker run -d \ --name rabbitmq \ # 如果保留非加密5672端口则添加下面这行映射 # -p 5672:5672 \ -p 5671:5671 \ -p 15672:15672 \ -p 15671:15671 \ -v /data/rabbitmq/config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \ -v /data/rabbitmq/certs:/etc/rabbitmq/certs \ -v /data/rabbitmq/data:/var/lib/rabbitmq \ --restart always \ rabbitmq:latest
验证修复结果
- 容器启动后等待30秒,执行
docker logs rabbitmq查看运行日志,无报错即为启动成功 - 用漏洞扫描工具重新探测对应端口,不会再触发「允许明文认证」的警告
- 客户端连接时,方案一使用5672端口+SCRAM认证机制,方案二使用5671端口+TLS加密连接即可正常访问
内容的提问来源于stack exchange,提问作者Sunil Kumar
相关产品推荐
相关产品推荐

