Skip to content

Commit bf8b9d4

Browse files
committed
cover enable host validation for kestrel
1 parent 59afb4a commit bf8b9d4

File tree

2 files changed

+24
-13
lines changed

2 files changed

+24
-13
lines changed

scenarios/rejection.benchmarks.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,12 @@ jobs:
4242
tlsRenegotiation: false
4343
tlsProtocols: "tls12,tls13"
4444
certPublicKeyLength: 2048 # controls cert with such a length is used for the test
45+
enableHostHeaderValidation: false # enables host header validation middleware
4546
# debug settings
4647
certValidationConsoleEnabled: false
4748
statsEnabled: false
4849
logRequestDetails: false
49-
arguments: "--urls https://{{serverAddress}}:{{serverPort}} --mTLS {{mTLS}} --certValidationConsoleEnabled {{certValidationConsoleEnabled}} --tlsProtocols {{tlsProtocols}} --statsEnabled {{statsEnabled}} --tlsRenegotiation {{tlsRenegotiation}} --logRequestDetails {{logRequestDetails}}"
50+
arguments: "--urls https://{{serverAddress}}:{{serverPort}} --mTLS {{mTLS}} --certValidationConsoleEnabled {{certValidationConsoleEnabled}} --tlsProtocols {{tlsProtocols}} --statsEnabled {{statsEnabled}} --tlsRenegotiation {{tlsRenegotiation}} --logRequestDetails {{logRequestDetails}} --enableHostHeaderValidation {{enableHostHeaderValidation}}"
5051

5152
scenarios:
5253

@@ -117,6 +118,8 @@ scenarios:
117118
kestrel-hostheader-mismatch:
118119
application:
119120
job: kestrelServer
121+
variables:
122+
enableHostHeaderValidation: true
120123
load:
121124
job: httpclient
122125
variables:

src/BenchmarksApps/TLS/Kestrel/Program.cs

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
var tlsRenegotiationEnabled = bool.TryParse(builder.Configuration["tlsRenegotiation"], out var tlsRenegotiationEnabledConfig) && tlsRenegotiationEnabledConfig;
2222
var certPublicKeySpecified = int.TryParse(builder.Configuration["certPublicKeyLength"], out var certPublicKeyConfig);
2323
var certPublicKeyLength = certPublicKeySpecified ? certPublicKeyConfig : 2048;
24+
var enableHostHeaderValidation = bool.TryParse(builder.Configuration["enableHostHeaderValidation"], out var enableHostHeaderValidationConfig) && enableHostHeaderValidationConfig;
2425

2526
// endpoints
2627
var listeningEndpoints = builder.Configuration["urls"] ?? "https://localhost:5000/";
@@ -39,20 +40,23 @@
3940
var connectionIds = new HashSet<string>();
4041
var fetchedCertsCounter = 0;
4142

42-
builder.Services.Configure<Microsoft.AspNetCore.HostFiltering.HostFilteringOptions>(options =>
43+
if (enableHostHeaderValidation)
4344
{
44-
var allowedHosts = new HashSet<string>();
45-
foreach (var endpoint in listeningEndpoints.Split([';'], StringSplitOptions.RemoveEmptyEntries))
45+
builder.Services.Configure<Microsoft.AspNetCore.HostFiltering.HostFilteringOptions>(options =>
4646
{
47-
var urlPrefix = UrlPrefix.Create(endpoint);
48-
allowedHosts.Add(urlPrefix.Host);
49-
}
47+
var allowedHosts = new HashSet<string>();
48+
foreach (var endpoint in listeningEndpoints.Split([';'], StringSplitOptions.RemoveEmptyEntries))
49+
{
50+
var urlPrefix = UrlPrefix.Create(endpoint);
51+
allowedHosts.Add(urlPrefix.Host);
52+
}
5053

51-
Console.WriteLine("Allowed Hosts: " + string.Join(';', allowedHosts));
52-
options.AllowedHosts = allowedHosts.ToArray();
53-
options.IncludeFailureMessage = false; // Suppress the failure message in response body
54-
options.AllowEmptyHosts = true;
55-
});
54+
Console.WriteLine("Configured HostFilteringOptions. Hosts: " + string.Join(';', allowedHosts));
55+
options.AllowedHosts = allowedHosts.ToArray();
56+
options.IncludeFailureMessage = false; // Suppress the failure message in response body
57+
options.AllowEmptyHosts = true;
58+
});
59+
}
5660

5761
builder.WebHost.UseKestrel(options =>
5862
{
@@ -123,7 +127,11 @@ void ConfigureListen(KestrelServerOptions serverOptions, IConfigurationRoot conf
123127

124128
var app = builder.Build();
125129

126-
app.UseHostFiltering();
130+
if (enableHostHeaderValidation)
131+
{
132+
Console.WriteLine("Enabled host header filtering middleware.");
133+
app.UseHostFiltering();
134+
}
127135

128136
bool AllowAnyCertificateValidationWithLogging(X509Certificate2 certificate, X509Chain? chain, SslPolicyErrors errors)
129137
{

0 commit comments

Comments
 (0)