.Net Core Web API with Client Certificate Authentication

For proper certificate authentication using the ASP.NET Core authentication stack, you can also check out idunno.Authentication.Certificate by Barry Dorrans himself. It allows you to enable certificate authentication for your application and handles it like any other authentication scheme, so you can keep actual certificate-based logic out of your business logic.

This project sort of contains an implementation of Certificate Authentication for ASP.NET Core. Certificate authentication happens at the TLS level, long before it ever gets to ASP.NET Core, so, more accurately this is an authentication handler that validates the certificate and then gives you an event where you can resolve that certificate to a ClaimsPrincipal.

You must configure your host for certificate authentication, be it IIS, Kestrel, Azure Web Applications or whatever else you're using.

Make sure to also check out the “documentation” on how to set this up properly, since it requires configuration of the host to work properly, just like you did with IIS Express. Instructions for other servers like raw Kestrel, IIS, Azure or general reverse proxies are included.


In order to enable IIS Express to start requesting client certificates and therefore pass them to the server side, the configuration file must be edited:

The whole configuration is inside the solution folder in the .vs\config\applicationhost.config

Ensure the following values are set:

<security>
   <access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />

and

<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>

For local testing, you can enable SSL in IIS Express from Visual Studio. In the Properties window, set SSL Enabled to True. Note the value of SSL URL; use this URL for testing HTTPS connections.

For Who needs Details here