RabbitMQ 3.10.6 SSL连接报错no_suitable_ciphers求助
解决RabbitMQ 3.10.6+Erlang 24 SSL连接报错
no_suitable_ciphers的问题 问题根源
Erlang 24与RabbitMQ 3.10对SSL/TLS的默认配置比旧版(Erlang 19+RabbitMQ 3.7)严格得多:
- 默认禁用了TLS 1.0、TLS 1.1等旧协议版本
- 默认剔除了DES、3DES、RC4等弱加密套件
你的客户端仍在使用旧版兼容的协议或套件,导致服务端无法匹配,触发no_suitable_ciphers错误。证书本身无问题(旧版可用即可证明),核心是加密协商不兼容。
解决步骤
1. 确认客户端的SSL能力
先明确客户端支持的TLS版本和加密套件:
- 若有OpenSSL环境,可执行以下命令测试:
如果TLS 1.1能连通但1.2不行,说明客户端仅支持旧协议;若所有TLS版本都失败,说明客户端使用的套件不在服务端允许列表内。# 测试TLS 1.1连接兼容性 openssl s_client -connect 你的MQ地址:5671 -tls1_1 # 测试TLS 1.2连接兼容性 openssl s_client -connect 你的MQ地址:5671 -tls1_2 # 查看客户端支持的所有加密套件 openssl ciphers -v
2. 修改RabbitMQ的SSL配置
在rabbitmq.conf中添加协议版本和加密套件配置,放宽限制(需确保业务场景允许):
listeners.ssl.default = 5671 ssl_options.verify = verify_none ssl_options.fail_if_no_peer_cert = false ssl_options.cacertfile = C:\Voyage Manager\RabbitMQ\Certificates\Server\cacert.pem ssl_options.certfile = C:\Voyage Manager\RabbitMQ\Certificates\Server\cert.pem ssl_options.keyfile = C:\Voyage Manager\RabbitMQ\Certificates\Server\key.pem # 添加允许的TLS版本(根据客户端支持情况调整) ssl_options.versions.1 = tlsv1.2 ssl_options.versions.2 = tlsv1.1 # 添加兼容旧版的加密套件列表 ssl_options.ciphers = ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384,ECDHE-ECDSA-CHACHA20-POLY1305,ECDHE-RSA-CHACHA20-POLY1305,ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-ECDSA-AES256-SHA384,ECDHE-RSA-AES256-SHA384,ECDHE-ECDSA-AES128-SHA256,ECDHE-RSA-AES128-SHA256,AES256-GCM-SHA384,AES128-GCM-SHA256,AES256-SHA256,AES128-SHA256,ECDHE-ECDSA-AES256-SHA,ECDHE-RSA-AES256-SHA,ECDHE-ECDSA-AES128-SHA,ECDHE-RSA-AES128-SHA,AES256-SHA,AES128-SHA
注意:套件列表可根据客户端实际支持的内容删减,无需全部保留。
3. 重启RabbitMQ服务
在PowerShell中执行命令重启服务:
net stop RabbitMQ && net start RabbitMQ
4. 验证配置生效
用RabbitMQ自带工具查看当前SSL配置:
rabbitmq-diagnostics ssl_help
输出内容会显示允许的TLS版本和加密套件,确认包含你添加的配置项。
长期优化建议
- 优先升级客户端,使其支持TLS 1.2+和现代加密套件,避免依赖弱加密配置,提升整体安全性。
- 检查证书签名算法:若证书使用SHA1签名(可通过
openssl x509 -in cert.pem -text -noout查看),建议重新生成使用SHA256及以上算法的证书,Erlang 24对SHA1签名的证书有更严格的限制。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

