У меня очень странная проблема с StackExchange.Redis для подключения к Redis.
Я включил SSL в базе данных Redis и не могу подключиться от клиента к серверу Redis с помощью SSL-сертификата с кодом ниже.
static RedisConnectionFactory()
{
try
{
string connectionString = "rediscluster:13184";
var options = ConfigurationOptions.Parse(connectionString);
options.Password = "PASSWORD";
options.AllowAdmin = true;
options.AbortOnConnectFail = false;
options.Ssl = true;
options.SslHost = "HOSTNAME";
var certificate = GetCertificateFromThubprint();
options.CertificateSelection += delegate
{
return certificate;
};
Connection = new Lazy<ConnectionMultiplexer>(
() => ConnectionMultiplexer.Connect(options)
);
}
catch (Exception ex)
{
throw new Exception("Unable to connect to Cache Server " + ex);
}
}
public static ConnectionMultiplexer GetConnection() => Connection.Value;
public static IEnumerable<RedisKey> GetCacheKeys()
{
return GetConnection().GetServer("rediscluster", 13184).Keys();
}
// Find certificate based on Thumbprint
private static X509Certificate2 GetCertificateFromThubprint()
{
// Find certificate from "certificate store" based on thumbprint and return
StoreName CertStoreName = StoreName.Root;
string PFXThumbPrint = "NUMBER";
X509Store certLocalMachineStore = new X509Store(CertStoreName, StoreLocation.LocalMachine);
certLocalMachineStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certLocalMachineCollection = certLocalMachineStore.Certificates.Find(
X509FindType.FindByThumbprint, PFXThumbPrint, true);
certLocalMachineStore.Close();
return certLocalMachineCollection[0];
}
Однако, если я создаю консольное приложение и подключаюсь к Redis с указанным выше кодом, я могу подключиться, но если я использовал тот же код из своего веб-приложения для подключения к redis, то я невозможность подключения.
Не уверен, что я что-то упустил.
Кроме того, я прошел через "mgravell" post
В этом посте он имеетнастроенный метод " CertificateValidation ", в моем сценарии я хочу, чтобы Redis проверял сертификат SSL. поэтому у меня нет проверки реализации. И внедрил метод CertificateSelection для предоставления клиентского сертификата.