Skip to content

Commit 1f19cc3

Browse files
committed
support TLS control on Kestrel
1 parent b873f08 commit 1f19cc3

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

scenarios/tls.benchmarks.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,12 @@ jobs:
3636
# behavioral settings
3737
mTLS: false
3838
tlsRenegotiation: false
39+
tlsProtocols: "tls12"
3940
# debug settings
4041
certValidationConsoleEnabled: false
4142
statsEnabled: false
4243
logRequestDetails: false
43-
arguments: "--urls https://{{serverAddress}}:{{serverPort}} --mTLS {{mTLS}} --certValidationConsoleEnabled {{certValidationConsoleEnabled}} --statsEnabled {{statsEnabled}} --tlsRenegotiation {{tlsRenegotiation}} --logRequestDetails {{logRequestDetails}}"
44+
arguments: "--urls https://{{serverAddress}}:{{serverPort}} --mTLS {{mTLS}} --certValidationConsoleEnabled {{certValidationConsoleEnabled}} --tlsProtocols {{tlsProtocols}} --statsEnabled {{statsEnabled}} --tlsRenegotiation {{tlsRenegotiation}} --logRequestDetails {{logRequestDetails}}"
4445

4546
scenarios:
4647

src/BenchmarksApps/TLS/Kestrel/Program.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Net;
22
using System.Net.Security;
3+
using System.Security.Authentication;
34
using System.Security.Cryptography.X509Certificates;
45
using Microsoft.AspNetCore.Authentication.Certificate;
56
using Microsoft.AspNetCore.Connections.Features;
@@ -15,6 +16,7 @@
1516
var mTlsEnabled = bool.TryParse(builder.Configuration["mTLS"], out var mTlsEnabledConfig) && mTlsEnabledConfig;
1617
var tlsRenegotiationEnabled = bool.TryParse(builder.Configuration["tlsRenegotiation"], out var tlsRenegotiationEnabledConfig) && tlsRenegotiationEnabledConfig;
1718
var listeningEndpoints = builder.Configuration["urls"] ?? "https://localhost:5000/";
19+
var supportedTlsVersions = ParseSslProtocols(builder.Configuration["tlsProtocols"]);
1820

1921
// debug
2022
var writeCertValidationEventsToConsole = bool.TryParse(builder.Configuration["certValidationConsoleEnabled"], out var certValidationConsoleEnabled) && certValidationConsoleEnabled;
@@ -46,6 +48,11 @@ void ConfigureListen(KestrelServerOptions serverOptions, IConfigurationRoot conf
4648
// [SuppressMessage("Microsoft.Security", "CSCAN0220.DefaultPasswordContexts", Justification="Benchmark code, not a secret")]
4749
listenOptions.UseHttps("testCert.pfx", "testPassword", options =>
4850
{
51+
if (supportedTlsVersions is not null)
52+
{
53+
options.SslProtocols = supportedTlsVersions.Value;
54+
}
55+
4956
if (mTlsEnabled)
5057
{
5158
options.ClientCertificateMode = ClientCertificateMode.RequireCertificate;
@@ -164,6 +171,7 @@ bool AllowAnyCertificateValidationWithLogging(X509Certificate2 certificate, X509
164171
{
165172
Console.WriteLine($"\tenabled logging stats to console");
166173
}
174+
Console.WriteLine($"\tsupported TLS versions: {supportedTlsVersions}");
167175
Console.WriteLine($"\tlistening endpoints: {listeningEndpoints}");
168176
Console.WriteLine("--------------------------------");
169177

@@ -184,4 +192,37 @@ static IPEndPoint CreateIPEndPoint(UrlPrefix urlPrefix)
184192
}
185193

186194
return new IPEndPoint(ip, urlPrefix.PortValue);
195+
}
196+
197+
static SslProtocols? ParseSslProtocols(string? supportedTlsVersions)
198+
{
199+
var protocols = SslProtocols.None;
200+
if (string.IsNullOrEmpty(supportedTlsVersions))
201+
{
202+
return protocols;
203+
}
204+
205+
foreach (var version in supportedTlsVersions.Split(','))
206+
{
207+
switch (version.Trim().ToLower())
208+
{
209+
#pragma warning disable SYSLIB0039 // Type or member is obsolete
210+
case "tls11":
211+
protocols |= SslProtocols.Tls11;
212+
break;
213+
#pragma warning restore SYSLIB0039 // Type or member is obsolete
214+
case "tls12":
215+
protocols |= SslProtocols.Tls12;
216+
break;
217+
case "tls13":
218+
protocols |= SslProtocols.Tls13;
219+
break;
220+
case "any":
221+
return null;
222+
default:
223+
throw new ArgumentException($"Unsupported TLS version: {version}");
224+
}
225+
}
226+
227+
return protocols;
187228
}

0 commit comments

Comments
 (0)