While working on the backend for To-Do.Studio, we ran into a scenario where we needed to test on a developer’s machine with https (ssl) enabled.
note – we use Kestral for testing and not IISExpress.
First thing we did was to try and add a https url in the LaunchSettings.json file. That didn’t work 🙂
What we found was that had to configure Kestral manually and tell it which certificate to use. The code in our Program class looks like this :
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseApplicationInsights() .UseAzureAppServices() #if DEBUG .UseKestrel(t => { t.Listen(IPAddress.Loopback, 55172); t.Listen(IPAddress.Loopback, 55000, o => { o.UseHttps("localhostCertificate.pfx", "password"); }); }) #endif .UseStartup<Startup>() .Build();
But how do we get a certificate ? There are various ways but i didn’t feel like finding my win32 sdk as some instruction’s on the web… so i decided to use my Ubuntu WSL…
Two commands
erik@ErikLAPTOP:~$ openssl req -x509 -days 10000 -newkey rsa:2048 -keyout cert.pem -out cert.pem erik@ErikLAPTOP:~$openssl pkcs12 -export -in cert.pem -inkey cert.pem -out cert.pfx
and i had a good looking self made certificate. The hardest part was to copy this cert.pfx file to a Windows directory so i could use it my code.
Voilà ! after modifying my LaunchSettings.json, i could test in either http or https mode !
"ToDoStudio.Server_http": { "commandName": "Project", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "applicationUrl": "http://localhost:55172/" }, "ToDoStudio.Server_https": { "commandName": "Project", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "applicationUrl": "https://localhost:55000/" }
Kestral? Do you mean “Kestrel”?