#309 allow users to ignore ssl warnings, not sure this is advisable (#325)

* #309 allow users to ignore ssl warnings, not sure this is advisable

* #309 docs for ssl ignore
This commit is contained in:
Tom Pallister
2018-04-22 12:05:49 +01:00
committed by GitHub
parent 4f061f2b74
commit 636d116491
9 changed files with 218 additions and 13 deletions

View File

@ -40,6 +40,7 @@ namespace Ocelot.Configuration.Builder
private List<string> _delegatingHandlers;
private List<AddHeader> _addHeadersToDownstream;
private List<AddHeader> _addHeadersToUpstream;
private bool _dangerousAcceptAnyServerCertificateValidator;
public DownstreamReRouteBuilder()
{
@ -241,6 +242,12 @@ namespace Ocelot.Configuration.Builder
return this;
}
public DownstreamReRouteBuilder WithDangerousAcceptAnyServerCertificateValidator(bool dangerousAcceptAnyServerCertificateValidator)
{
_dangerousAcceptAnyServerCertificateValidator = dangerousAcceptAnyServerCertificateValidator;
return this;
}
public DownstreamReRoute Build()
{
return new DownstreamReRoute(
@ -272,7 +279,8 @@ namespace Ocelot.Configuration.Builder
_reRouteKey,
_delegatingHandlers,
_addHeadersToDownstream,
_addHeadersToUpstream);
_addHeadersToUpstream,
_dangerousAcceptAnyServerCertificateValidator);
}
}
}

View File

@ -213,6 +213,7 @@ namespace Ocelot.Configuration.Creator
.WithDelegatingHandlers(fileReRoute.DelegatingHandlers)
.WithAddHeadersToDownstream(hAndRs.AddHeadersToDownstream)
.WithAddHeadersToUpstream(hAndRs.AddHeadersToUpstream)
.WithDangerousAcceptAnyServerCertificateValidator(fileReRoute.DangerousAcceptAnyServerCertificateValidator)
.Build();
return reRoute;

View File

@ -35,8 +35,10 @@ namespace Ocelot.Configuration
string reRouteKey,
List<string> delegatingHandlers,
List<AddHeader> addHeadersToDownstream,
List<AddHeader> addHeadersToUpstream)
List<AddHeader> addHeadersToUpstream,
bool dangerousAcceptAnyServerCertificateValidator)
{
DangerousAcceptAnyServerCertificateValidator = dangerousAcceptAnyServerCertificateValidator;
AddHeadersToDownstream = addHeadersToDownstream;
DelegatingHandlers = delegatingHandlers;
Key = key;
@ -97,5 +99,6 @@ namespace Ocelot.Configuration
public List<string> DelegatingHandlers {get;private set;}
public List<AddHeader> AddHeadersToDownstream {get;private set;}
public List<AddHeader> AddHeadersToUpstream { get; private set; }
public bool DangerousAcceptAnyServerCertificateValidator { get; private set; }
}
}

View File

@ -49,5 +49,6 @@ namespace Ocelot.Configuration.File
public List<string> DelegatingHandlers {get;set;}
public int Priority { get;set; }
public int Timeout { get; set; }
public bool DangerousAcceptAnyServerCertificateValidator { get; set; }
}
}

View File

@ -16,7 +16,6 @@ namespace Ocelot.Requester
private string _cacheKey;
private HttpClient _httpClient;
private IHttpClient _client;
private HttpClientHandler _httpclientHandler;
private readonly TimeSpan _defaultTimeout;
public HttpClientBuilder(
@ -33,9 +32,9 @@ namespace Ocelot.Requester
_defaultTimeout = TimeSpan.FromSeconds(90);
}
public IHttpClient Create(DownstreamContext request)
public IHttpClient Create(DownstreamContext context)
{
_cacheKey = GetCacheKey(request);
_cacheKey = GetCacheKey(context);
var httpClient = _cacheHandlers.Get(_cacheKey);
@ -44,18 +43,26 @@ namespace Ocelot.Requester
return httpClient;
}
_httpclientHandler = new HttpClientHandler
var httpclientHandler = new HttpClientHandler
{
AllowAutoRedirect = request.DownstreamReRoute.HttpHandlerOptions.AllowAutoRedirect,
UseCookies = request.DownstreamReRoute.HttpHandlerOptions.UseCookieContainer,
AllowAutoRedirect = context.DownstreamReRoute.HttpHandlerOptions.AllowAutoRedirect,
UseCookies = context.DownstreamReRoute.HttpHandlerOptions.UseCookieContainer,
CookieContainer = new CookieContainer()
};
var timeout = request.DownstreamReRoute.QosOptionsOptions.TimeoutValue == 0
? _defaultTimeout
: TimeSpan.FromMilliseconds(request.DownstreamReRoute.QosOptionsOptions.TimeoutValue);
if(context.DownstreamReRoute.DangerousAcceptAnyServerCertificateValidator)
{
httpclientHandler.ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
_httpClient = new HttpClient(CreateHttpMessageHandler(_httpclientHandler, request.DownstreamReRoute))
_logger
.LogWarning($"You have ignored all SSL warnings by using DangerousAcceptAnyServerCertificateValidator for this DownstreamReRoute, UpstreamPathTemplate: {context.DownstreamReRoute.UpstreamPathTemplate}, DownstreamPathTemplate: {context.DownstreamReRoute.DownstreamPathTemplate}");
}
var timeout = context.DownstreamReRoute.QosOptionsOptions.TimeoutValue == 0
? _defaultTimeout
: TimeSpan.FromMilliseconds(context.DownstreamReRoute.QosOptionsOptions.TimeoutValue);
_httpClient = new HttpClient(CreateHttpMessageHandler(httpclientHandler, context.DownstreamReRoute))
{
Timeout = timeout
};