ssl - RabbitMQ Web-MQTT WSS 关闭客户端连接。不安全的 WS 和其他安全协议工作
问题描述
我有一个 RabbitMQ 部署,它使用它自己的证书进行端到端加密。它同时使用 AMQP 和 MQTT-over-WSS 来连接多种类型的客户端。AMQP 客户端能够安全地连接,所以我知道证书设置是好的。
使用 WS 的客户端ws://hostname:15675/ws
可以正常连接,但显然不安全。尝试连接以wss://hostname:15676/ws
关闭连接的客户端。15676
是您将看到的端口,我已将web-mqtt
ssl 侦听器绑定到,如下所示。我已经阅读了 RabbitMQ 的帮助指南networking
和tls
帮助指南,我看到端口正确绑定,并且可以确认它已公开并可供客户端使用。
相关rabbit.conf
:
listeners.tcp.default = 5671
listeners.ssl.default = 5671
ssl_options.cacertfile = /path/to/fullchain.pem
ssl_options.certfile = /path/to/cert.pem
ssl_options.keyfile = /path/to/privkey.pem
ssl_options.verify = verify_none
ssl_options.fail_if_no_peer_cert = false
web_mqtt.ssl.port = 15676
web_mqtt.ssl.backlog = 1024
web_mqtt.ssl.cacertfile = /path/to/fullchain.pem
web_mqtt.ssl.certfile = /path/to/cert.pem
web_mqtt.ssl.keyfile = /path/to/privkey.pem
基本上,我想知道我的连接字符串是否错误(wss://hostname:15675/ws
)?我需要去/wss
吗?我的客户端是运行在浏览器上的浏览器localhost
——而不是 HTTPS,这是一个问题吗?我是否设置了错误的配置——我错过了一个吗?如果在 RabbitMQ 网站之外有更好的该插件的文档/示例来源,我也会感兴趣。
解决方案
如果您还需要添加私有文件的任何密码,则可能是配置不匹配。请参阅以下示例 rabbitmq.conf
listeners.ssl.default = 5671
ssl_options.cacertfile = <path/ca-bundle (.pem/.cabundle)>
ssl_options.certfile = <path/cert (.pem/.crt)>
ssl_options.keyfile = <path/key (.pem/.key)>
ssl_options.password = <your private key password>
ssl_options.versions.1 = tlsv1.3
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = true
ssl_options.ciphers.1 = TLS_AES_256_GCM_SHA384
ssl_options.ciphers.2 = TLS_AES_128_GCM_SHA256
ssl_options.ciphers.3 = TLS_CHACHA20_POLY1305_SHA256
ssl_options.ciphers.4 = TLS_AES_128_CCM_SHA256
ssl_options.ciphers.5 = TLS_AES_128_CCM_8_SHA256
ssl_options.honor_cipher_order = true
ssl_options.honor_ecc_order = true
web_mqtt.ssl.port = 15676
web_mqtt.ssl.backlog = 1024
web_mqtt.ssl.cacertfile = <path/ca-bundle (.pem/.cabundle)>
web_mqtt.ssl.certfile = <path/crt (.pem/.crt)>
web_mqtt.ssl.keyfile = <path/key (.pem/.key)>
web_mqtt.ssl.password = <your private key password>
web_mqtt.ssl.honor_cipher_order = true
web_mqtt.ssl.honor_ecc_order = true
web_mqtt.ssl.client_renegotiation = false
web_mqtt.ssl.secure_renegotiate = true
web_mqtt.ssl.versions.1 = tlsv1.2
web_mqtt.ssl.versions.2 = tlsv1.1
web_mqtt.ssl.ciphers.1 = ECDHE-ECDSA-AES256-GCM-SHA384
web_mqtt.ssl.ciphers.2 = ECDHE-RSA-AES256-GCM-SHA384
web_mqtt.ssl.ciphers.3 = ECDHE-ECDSA-AES256-SHA384
web_mqtt.ssl.ciphers.4 = ECDHE-RSA-AES256-SHA384
web_mqtt.ssl.ciphers.5 = ECDH-ECDSA-AES256-GCM-SHA384
web_mqtt.ssl.ciphers.6 = ECDH-RSA-AES256-GCM-SHA384
web_mqtt.ssl.ciphers.7 = ECDH-ECDSA-AES256-SHA384
web_mqtt.ssl.ciphers.8 = ECDH-RSA-AES256-SHA384
web_mqtt.ssl.ciphers.9 = DHE-RSA-AES256-GCM-SHA384
这是 ubuntu 20.04 上的 rabbitmq-server 的工作配置文件
- 重启rabbitmq-server
- 列出侦听器端口(确保启用 SSL 端口)(
rabbitmq-diagnostics listeners
) - 测试 SSL (
testssl localhost:16567
) - 还测试 telnet (
telnet localhost 16567
)
请参考:https ://www.rabbitmq.com/ssl.html#erlang-otp-requirements和 故障排除
这对我有用:-)
推荐阅读
- laravel - Laravel 存储库类 App\Repository\User 不存在
- php - 如何计算 24 小时制 H:i 时间之间的差异?
- java - 如何使用 PowerMock 和 Mockito 对 Files.java 中的 newDirectoryStream 进行部分模拟?
- c# - 如何在 MQL4 中修复“未解决的导入调用:在 y.dll 中找不到 x()”
- javascript - JavaScript:如何对嵌套数组进行分组
- sql-server - 在 Microsoft SQL Server Management Studio 中找不到数据库实例
- ruby-on-rails - Ruby on Rails 中的活动记录
- java - 如何更改非 sp 比例的字体大小?
- python - 如何创建 get_cartesian 函数
- oracle - 如何在所述对象的表中执行对象的过程?