How to HTTPS (SSL) with self-hosted ASP.NET Core 2 app (httpsys) How to HTTPS (SSL) with self-hosted ASP.NET Core 2 app (httpsys) windows windows

How to HTTPS (SSL) with self-hosted ASP.NET Core 2 app (httpsys)


So I solve the problem in the following way:

First, if you want to know your own GUID, you will get it with the following code:

var id = typeof(RuntimeEnvironment).GetTypeInfo().Assembly.GetCustomAttribute<GuidAttribute>().Value;

Create a SelfSigned Certificate

Now create a SelfSigned-Certificate (Skip this if you already got one, or purchased one)

  1. Run the following OpenSSL command to generate your private key and public certificate. Answer the questions and enter the Common Name when prompted.

openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem

  1. Combine your key and certificate in a PKCS#12 (P12) bundle:

openssl pkcs12 -inkey key.pem -in certificate.pem -export -out certificate.p12

Install the certificate on the client:

For Windows 8 and higher:

Add Certificate to Windows Cert Store with PowerShell

PS C:> $certpwd = ConvertTo-SecureString -String "passwort" -Force –AsPlainText

PS C:> Import-PfxCertificate –FilePath D:\data\cert\certificate.p12 cert:\localMachine\my -Password $certpwd

Get Fingerprint (Hash) of certificate

PS C:\WINDOWS\system32> dir Cert:\LocalMachine\my

Install certificate (replace Hash, IP and Port with your values)

PS C:\WINDOWS\system32> $guid = [guid]::NewGuid()

PS C:\WINDOWS\system32> $certHash = "A1D...B672E"

PS C:\WINDOWS\system32> $ip = "0.0.0.0"

PS C:\WINDOWS\system32> $port = "5050"

PS C:\WINDOWS\system32> "http add sslcert ipport=$($ip):$port certhash=$certHash appid={$guid}" | netsh

You are done.

For Windows 7

Add Certificate to Windows Cert Store (note: use .pem file for this operation, because .p12 file seems to be not supported from certutil)

.\certutil.exe -addstore -enterprise -f "Root" C:\lwe\cert\certificate.pem

If his line throws the following error:

SSL Certificate add failed, Error 1312 A specified logon session does not exist. It may already have been terminated.

You have to do the steps manually (please insert the .p12 file when doing it manually, not .pem) :

Run mmc.exe

  • Go to File-> Add/Remove Snap-In

  • Choose the Certificates snap-in.

  • Select Computer Account

  • Navigate to: Certificates (Local Computer)\Personal\Certificates

  • Right click the Certificates folder and choose All Tasks -> Import.

  • Follow the wizard instructions to select the certificate. Be sure you check the export checkbox during wizard.

To get the hash of yor certificate, run the Internet Explorer, press Alt + X and go to Internet Options -> Content -> Certificates. Search your certificate and read the hash.

Now you can run the same commands as for Windows 8+:

Install certificate (replace Hash, IP and Port with your values)

PS C:\WINDOWS\system32> $guid = [guid]::NewGuid()

PS C:\WINDOWS\system32> $certHash = "A1D...B672E"

PS C:\WINDOWS\system32> $ip = "0.0.0.0"

PS C:\WINDOWS\system32> $port = "5050"

PS C:\WINDOWS\system32> "http add sslcert ipport=$($ip):$port certhash=$certHash appid={$guid}" | netsh

Edit your Code

After all, you have to set the UrlPrefixes to https. So in your Program.cs file you need to have:

var host = WebHost.CreateDefaultBuilder(args)            .UseContentRoot(pathToContentRoot)            .UseHttpSys(options =>            {                options.Authentication.Schemes = AuthenticationSchemes.None;                options.Authentication.AllowAnonymous = true;                options.MaxConnections = null;                options.MaxRequestBodySize = 30000000;                options.UrlPrefixes.Add("https://*:5050");            })            .UseStartup<Startup>()            .UseApplicationInsights()            .Build();