如何用私钥、公钥、CA及密码配置Redis SSL连接?StackExchange.Redis连接失败
Redis SSL连接配置与StackExchange.Redis 2.6.6连接故障排查
一、Redis服务器端SSL配置要点
要启用Redis SSL连接,需完成以下配置:
- 证书准备:
- 服务器私钥(
.key)、公钥证书(.crt,需包含完整证书链) - CA根证书(客户端用于验证服务器证书,自签场景需保存本地)
- 服务器私钥(
- Redis.conf配置修改:
修改后重启Redis服务生效。# 关闭普通端口,启用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
二、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"));
三、针对性故障排查(桌面能连代码不行的常见原因)
- SSL协议版本不兼容:桌面工具通常自动适配协议,但StackExchange.Redis 2.6.6默认未强制启用TLS1.2+,需显式设置
SslProtocols - 证书信任未配置:桌面工具可能手动跳过或信任了证书,代码中必须明确加载CA根证书并配置验证逻辑
- 密码配置错误:避免在EndPoint字符串中拼接密码,优先使用
ConfigurationOptions.Password属性设置 - 端口误用:确保代码使用的是Redis的SSL端口(默认6380)而非普通6379端口
- 证书链不完整:服务器端公钥证书必须包含完整的CA链,否则客户端会因无法溯源到可信CA而拒绝连接
内容的提问来源于stack exchange,提问作者Cláudio Rafael
相关产品推荐
相关产品推荐

