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

如何用私钥、公钥、CA及密码配置Redis SSL连接?StackExchange.Redis连接失败

Redis SSL连接配置与StackExchange.Redis 2.6.6连接故障排查

一、Redis服务器端SSL配置要点

要启用Redis SSL连接,需完成以下配置:

  • 证书准备:
    • 服务器私钥(.key)、公钥证书(.crt,需包含完整证书链)
    • CA根证书(客户端用于验证服务器证书,自签场景需保存本地)
  • Redis.conf配置修改:
    # 关闭普通端口,启用SSL端口
    port 0
    tls-port 6380
    
    # 指定证书文件路径
    tls-cert-file /etc/redis/server.crt
    tls-key-file /etc/redis/server.key
    
    # 可选:如果需要验证客户端证书,添加CA证书路径
    # tls-ca-cert-file /etc/redis/ca.crt
    
    # 配置密码验证
    requirepass your_redis_password
    
    修改后重启Redis服务生效。

二、StackExchange.Redis 2.6.6客户端正确配置

由于你已通过桌面工具成功连接,问题大概率出在客户端代码的SSL配置细节上,以下是完整配置示例:

using StackExchange.Redis;
using System.Security.Cryptography.X509Certificates;
using System.Security.Authentication;

var config = new ConfigurationOptions
{
    // 指定Redis SSL端口
    EndPoints = { "your_redis_host:6380" },
    // 开启SSL
    Ssl = true,
    // 设置Redis密码
    Password = "your_redis_password",
    // 指定兼容的SSL协议版本(避免协议不匹配)
    SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13,
    // 证书选择(加载CA根证书用于验证)
    CertificateSelection = (sender, targetHost, localCerts, remoteCert, acceptableIssuers) =>
        new X509Certificate2("/path/to/your/ca.crt"),
    // 证书验证逻辑
    CertificateValidation = (sender, cert, chain, errors) =>
    {
        // 无错误直接通过
        if (errors == SslPolicyErrors.None) return true;
        // 自签场景:验证证书签发者为指定CA
        return chain.ChainElements.Any(elem => 
            elem.Certificate.Subject.Equals("CN=Your-CA-Subject-Name"));
    }
};

// 建立连接
var multiplexer = ConnectionMultiplexer.Connect(config);
var db = multiplexer.GetDatabase();

// 测试连接
db.StringSet("test_key", "test_value");
Console.WriteLine(db.StringGet("test_key"));

三、针对性故障排查(桌面能连代码不行的常见原因)

  1. SSL协议版本不兼容:桌面工具通常自动适配协议,但StackExchange.Redis 2.6.6默认未强制启用TLS1.2+,需显式设置SslProtocols
  2. 证书信任未配置:桌面工具可能手动跳过或信任了证书,代码中必须明确加载CA根证书并配置验证逻辑
  3. 密码配置错误:避免在EndPoint字符串中拼接密码,优先使用ConfigurationOptions.Password属性设置
  4. 端口误用:确保代码使用的是Redis的SSL端口(默认6380)而非普通6379端口
  5. 证书链不完整:服务器端公钥证书必须包含完整的CA链,否则客户端会因无法溯源到可信CA而拒绝连接

内容的提问来源于stack exchange,提问作者Cláudio Rafael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:15:39