The other day I was going to test and debug some code on a Windows Server 2012RC machine when I encountered the exception ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY
when running my asp.net core 3.1 razor pages website.
This site worked fine elsewhere so to try and narrow down the problem I created a brand new asp.net core website to see if it was something in my code that was the issue but I had the same error showing up in google chrome.
After some googling, I tried to reset the servers self-signed SSL certificate by using the following closing the browser in between but that had no effect:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
I created a github issue and the ever-helpful @guardrex came to my rescue again and pointed me in the right direction.
It is a known bug and there is an open Github issue for it.
Workaround
So here for others and me if this happens again is my workaround:
A specific down-level machine (Windows Server 2012R2) was causing the exception and because I knew which machine, I had access to its Environment.MachineName
which I use later to programmatically decide which ListenOptions.Protocols
Kestrel should load.
HTTP/1 on the down-level machine but HTTP/2 elsewhere.
So, I created an appsettings.{the-environment.machinename-value-here}.json
file alongside appsettings.Development.json
with the following HTTP/1 settings rather than the default HTTP/2 settings that are loaded by default elsewhere.
appsettings.machinename.json
{
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http1"
}
}
}
Then in Program.cs I modified CreateHostBuilder
to read the above custom appsettings.json file.
Note the line containing: config.AddJsonFile($”appsettings.{Environment.MachineName}.json”, optional: true);
Program.cs
namespace mynamespace
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile($"appsettings.{Environment.MachineName}.json", optional: true);
config.AddCommandLine(args);
})
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
}
}
Success 🎉
Top comments (0)