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

Windows Server 2019上.NET客户端无法通过TLS连接RabbitMQ 5671端口

解决方案:RabbitMQ TLS连接no_suitable_ciphers错误修复

问题根源

日志中的SERVER ALERT: Fatal - Insufficient Security - no_suitable_ciphers明确说明:RabbitMQ(依赖Erlang OTP 26.0)与Windows Server 2019的TLS密码套件集无重叠,导致TLS握手协商失败。即使通过IISCrypto启用了系统级套件,Erlang默认的TLS配置可能未包含这些套件,或者两者的套件格式、优先级不匹配。

修复步骤

1. 查看Erlang支持的TLS 1.2密码套件

打开Erlang Shell(开始菜单搜索erl),执行以下命令获取Erlang支持的TLS1.2套件列表:

ssl:cipher_suites(all, 'tlsv1.2').

输出会列出Erlang支持的所有TLS1.2套件,记录其中的RSA类套件(你的证书为RSA密钥),例如ecdhe_rsa_aes_256_gcm_sha384、dhe_rsa_aes_256_gcm_sha384等。

2. 更新RabbitMQ的TLS配置,显式指定兼容套件

修改rabbitmq.config,在ssl_options中添加ciphers配置项,填入Erlang支持且Windows Server 2019已启用的套件(需和步骤1的输出格式完全一致):

[{rabbit,
    [
        {log_levels, [{connection, debug}, {queue, debug}]},
        {log,
            [
                {file, 
                    [
                        {level, debug}
                    ]
                },
                {categories,
                    [
                        {connection,[{level, debug}]},
                        {queue, [{level, debug}]},
                        {console, [{enabled, true},{level, debug}]}
                    ]
                }
            ]
        },
        {ssl_listeners, [5671]},
        {ssl_options, 
            [
               {cacertfile, "C:\\Program Files\\RabbitMQ Server\\rabbitmq_server-3.12.1\\certs\\ca_certificate.pem"},
               {certfile,   "C:\\Program Files\\RabbitMQ Server\\rabbitmq_server-3.12.1\\certs\\server_certificate.pem"},
               {keyfile,    "C:\\Program Files\\RabbitMQ Server\\rabbitmq_server-3.12.1\\certs\\server_key.pem"},
               {password, "12345678"},
               {versions, ['tlsv1.2']}, % 强制仅使用TLS1.2
               {ciphers, [ecdhe_rsa_aes_256_gcm_sha384, ecdhe_rsa_aes_128_gcm_sha256, dhe_rsa_aes_256_gcm_sha384]} % 填入兼容套件
            ]
        }        
    ]
}].

注意:ciphers中的套件名称必须和Erlang Shell输出一致,区分大小写、下划线分隔。

3. 验证Windows Server 2019的TLS 1.2配置

打开注册表编辑器,导航到HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server:

  • 确保Enabled DWORD值为1,DisabledByDefault DWORD值为0
  • 若存在TLS 1.0/TLS 1.1的Server项,设置Enabled为0,DisabledByDefault为1

4. 配置.NET客户端的TLS参数

确保客户端明确指定TLS1.2,且证书匹配:

var factory = new ConnectionFactory
{
    HostName = "machine.domain.local",
    Port = 5671,
    UserName = "your_username",
    Password = "your_password",
    Ssl = new SslOption
    {
        Enabled = true,
        ServerName = "machine.domain.local", // 必须和证书CN/ALT_NAME一致
        SslProtocol = SslProtocols.Tls12
    }
};

若仍报错,可尝试显式指定客户端支持的cipher套件,确保与服务器配置重叠。

5. 重启RabbitMQ服务

修改配置后重启服务生效:

net stop RabbitMQ && net start RabbitMQ

额外排查建议

  • 用Wireshark抓包分析TLS握手过程,确认客户端和服务器交换的套件列表是否有重叠
  • 验证客户端证书信任:确认客户端机器的受信任根证书存储中已安装cacert.cer

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:34:57