Skip to content

Commit

Permalink
Add OrchardCore_Redis:DisableCertificateVerification option (#15077) (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
ovekaaven authored Jan 13, 2024
1 parent e33c5ed commit dd71360
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
3 changes: 2 additions & 1 deletion src/OrchardCore.Cms.Web/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@
// See https://stackexchange.github.io/StackExchange.Redis/Configuration.html
//"OrchardCore_Redis": {
// "Configuration": "192.168.99.100:6379,allowAdmin=true", // Redis Configuration string.
// "InstancePrefix": "" // Optional prefix allowing a Redis instance to be shared by different applications.
// "InstancePrefix": "", // Optional prefix allowing a Redis instance to be shared by different applications.
// "DisableCertificateVerification": false // Disable SSL/TLS certificate verification.
//},
// See https://docs.orchardcore.net/en/latest/docs/reference/modules/Security/#security-settings-configuration to configure security settings.
//"OrchardCore_Security": {
Expand Down
19 changes: 17 additions & 2 deletions src/OrchardCore.Modules/OrchardCore.Redis/Startup.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
using System;
using System.Linq;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using Microsoft.AspNetCore.DataProtection.KeyManagement;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.StackExchangeRedis;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
Expand Down Expand Up @@ -35,9 +38,16 @@ public override void ConfigureServices(IServiceCollection services)
{
try
{
var configuration = _configuration["OrchardCore_Redis:Configuration"];
var section = _configuration.GetSection("OrchardCore_Redis");

var configuration = section["Configuration"];
var configurationOptions = ConfigurationOptions.Parse(configuration);
var instancePrefix = _configuration["OrchardCore_Redis:InstancePrefix"];
var instancePrefix = section["InstancePrefix"];

if (section.GetValue("DisableCertificateVerification", false))
{
configurationOptions.CertificateValidation += IgnoreCertificateErrors;
}

services.Configure<RedisOptions>(options =>
{
Expand All @@ -56,6 +66,11 @@ public override void ConfigureServices(IServiceCollection services)
services.AddSingleton<IModularTenantEvents>(sp => sp.GetRequiredService<IRedisService>());
services.AddSingleton<IRedisDatabaseFactory, RedisDatabaseFactory>();
}

// Callback for accepting any certificate as long as it exists, while ignoring other SSL policy errors.
// This allows the use of self-signed certificates on the Redis server.
private static bool IgnoreCertificateErrors(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
=> (sslPolicyErrors & SslPolicyErrors.RemoteCertificateNotAvailable) == 0;
}

[Feature("OrchardCore.Redis.Cache")]
Expand Down

0 comments on commit dd71360

Please sign in to comment.