java - RabbitMQ - 信任存储允许所有连接通过
问题描述
我遇到了 RabbitMQ 的 Trust Store 的问题。我已经安装了 github 上显示的插件,该插件确实加载了,当我将证书放入白名单文件夹时它甚至会响应(如果我删除了像私钥这样的错误 cert.pem,我会收到一个错误响应,即证书是'不是证书,如果我放弃一个好的证书,我会得到这样的响应:信任存储:加载证书'cert.pem') - 这很好。但是,这就是问题开始的地方。即使白名单文件夹中没有证书,我与我的 Java 客户端建立的 MQTT 和 AMQP 连接也会通过。如果我正确理解了整个插件的想法,那么只有在白名单文件夹中存在证书时才应该通过它们,否则它们不应该存在。
有人碰巧遇到同样的事情吗?
技术:Docker 上的 RabbitMQ,使用 ssl 的 bouncycastle 库的 Java 客户端
// 编辑插件:Rabbitmq.config 文件
[
{ rabbit, [
{ loopback_users, [ ] },
{ssl_handshake_timeout, 100000},
{ tcp_listeners, [ 5672 ] },
{ ssl_listeners, [ 5671 ] },
{ ssl_options, [
{ cacertfile, "/etc/tls/cacert.pem" },
{ certfile, "/etc/tls/cert.pem" },
{ keyfile, "/etc/tls/key.pem" },
{ verify, verify_peer },
{ fail_if_no_peer_cert, true },
{ reuse_sessions, false}
] },
{ default_pass, <<"guest">> },
{ default_user, <<"guest">> },
{ default_vhost, <<"/">> },
{ hipe_compile, false }
] },
{ rabbitmq_management, [ { listener, [
{ port, 15671 },
{ ssl, true },
{ ssl_opts, [
{ cacertfile, "/etc/tls/cacert.pem" },
{ certfile, "/etc/tls/cert.pem" },
{ fail_if_no_peer_cert, false },
{ keyfile, "/etc/tls/key.pem" },
{ verify, verify_peer }
] }
] } ] },
{ rabbitmq_mqtt, [
{ vhost, <<"/">> },
{ exchange, <<"amq.topic">> },
{ default_user, <<"guest">> },
{ default_pass, <<"guest">> },
{ tcp_listeners, [ 1883 ] },
{ ssl_listeners, [ 8883 ] }
] },
{rabbitmq_trust_store, [
{directory, "/etc/whitelist"},
{refresh_interval, {seconds, 30}},
{log_levels, [{connection, debug}, {channel, debug}, {federation, debug}]}
]}
].
解决方案
根据提供的信息量有限,我几乎是在猜测,但您可能没有配置 TLS 来验证客户端的证书。您需要使用verify_peer
RabbitMQ 配置选项。我们有全面的文档,建议您阅读- https://www.rabbitmq.com/ssl.html,https://www.rabbitmq.com/troubleshooting-ssl.html
另请注意,您列入白名单的证书是用于签署您的应用程序提供的客户端证书的 CA 证书,而不是客户端证书本身。
最后,快速获得帮助的最佳方式是提供一组文件,供某人用来运行 RabbitMQ 和一个测试应用程序以查看问题。
注意: RabbitMQ 团队会监控rabbitmq-users
邮件列表,有时只会在 StackOverflow 上回答问题。
推荐阅读
- c# - 如何使用 CrmServiceClient 设置空属性值
- python - 带有三个表的 Flask SQLAlchemy 外连接
- scala - 更新和删除查询在 play-slick 中不起作用
- c# - 无法访问已处置的对象 Asp.net Identity Core
- python - 从源代码安装时,使用 Python 3 和 Windows 安装 Spacy for NLP 会出错
- wordpress - Wordpress 移动菜单插件
- ruby-on-rails - Rails link_to 调用不正确的控制器动作
- swift - 如何在 UI 测试中进行新闻发布?
- flutter - Flutter:ListView禁用触摸屏滚动
- python - 带hwnd的grabWindow返回黑屏