Search code examples
c#certificateasp.net-core-2.0identityserver4signing

IdentityServer4 AddSigningCredentials with Certificate


I have an SSL certificate installed on my domain and I wanted to use it for signing with IdentityServer 4. Now I found that there is a method which would let me do that:

services.AddIdentityServer().AddSigningCredentials(certificate);

However, I cannot figure out how to actually get my certificate and pass it to the identity server.

I have tried the following:

var cert = X509Certificate.CreateFromCertFile(fileName);
services.AddIdentityServer().AddSigningCredentials(certificate);

The error that I get is it cannot convert from

'System.Security.Cryptography.X509Certificates.X509Certificate' to 'Microsoft.IdentityModel.Tokens.SIgningCredential'

Now I don't understand why it is complaining about signing credentials when one of the overrides for the method is the certificate.


Solution

  • I ended up resolving it like this. I'm using a shared server where I am hosting this and I could not find the file name for the certificate or the path to get it. So I ended up just opening the store and finding it that way. Not very efficient, but it will do the trick until I move it to a dedicated server and have more control.

    X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadOnly);
    X509Certificate2 cert = null;
    
    foreach (X509Certificate2 certificate in store.Certificates)
    {
        if (!string.IsNullOrWhiteSpace(certificate?.SubjectName?.Name) && certificate.SubjectName.Name.StartsWith("CN=*.mysite.com"))
        {
            cert = certificate;
            break;
        }
    }