FiloSottile / mkcert

A simple zero-config tool to make locally trusted development certificates with any names you'd like.
https://mkcert.dev
BSD 3-Clause "New" or "Revised" License
48.79k stars 2.52k forks source link

IIS complains about missing intermediates #148

Open natiki opened 5 years ago

natiki commented 5 years ago

Hi,

Generated my new wildcard certificate as:

 mkcert -pkcs12 "*.ozc.black"

I then go to IIS > Server Certificates and try and import it but am prompted for a password?

image

What am I missing here? It is not my login password.

FiloSottile commented 5 years ago

The password is “changeit” (for unfortunate legacy PKCS#12 reasons). The output of mkcert should have mentioned it, didn’t it?

natiki commented 5 years ago

@FiloSottile OMG sorry about that, RTFM!!!! It does indeed say that. My apologies for being like a typical user and not reading things.

FiloSottile commented 5 years ago

It’s ok, we all glance over things from time to time :)

natiki commented 5 years ago

Seems IIS now belives there are missing intermediates?

image

FiloSottile commented 5 years ago

That’s weird, as mkcert does not use intermediates.

The message says “installed”, maybe it wants the root in the system store? In that case running “mkcert -install” might fix it, but that would be a weird requirement.

natiki commented 5 years ago

I had previously run mkcert -intall and it said it had installed it? Re-ran it just to be sure and the response is:

Using the local CA at "C:\Users\{OmittedForSecurity}\AppData\Local\mkcert

and I can see the CA as:

image

FiloSottile commented 5 years ago

I’m afraid we have to wait for someone who actually dealt with IIS, I have never actually used it.

CW92 commented 5 years ago

When using the certificate locally I don't get this issue but when I move it to a VM I get the same error.

Looking at my local machine I have a Certificate created and it is using that (Named "mkcert {Domain}{Username}").

I exported this certificate as .p7b and then imported this on my VM and no longer saw this message pop up in IIS.

natiki commented 5 years ago

My case was Windows 10 running on bare metal.

CW92 commented 5 years ago

If you go to MMC > Certificates > Choose the Certificate > Certification Path, does this certificate appear at the top level or as a sub certificate?

natiki commented 5 years ago

Top level image

martinib77 commented 3 years ago

I'm having the same problem. Did somebody find a solution ?

CW92 commented 3 years ago

I'm having the same problem. Did somebody find a solution ?

I am not having the same issue, in Powershell Admin (Don't know if Admin mode is required but I use it for personal preference).

Created a new one running:

(Screenshot from Powershell) image

When I import my certificate into IIS I am not getting this, looking at the server certification path I have the top as the machine signing the cert (mkcert -install cert) and then "2021-06-24.localtest.me" (My newly created cert). (Screenshot from Certificate) image

When I have had issues it is due to the certificate not containing the top level Signing Certificate, if the one generated from mkcert is missing the signing Certificate then this can be exported from MMC.

Please let me know if after trying both of these that neither option is working and I will see if I have to do any other steps.

martinib77 commented 3 years ago

I did both options.

But the moment i save the Binding on IIS the intermediate certificates error appears.

ie-message

Viewing the certificate, everything is ok

certificate-path

And when i use Chrome to browse the site, it shows as secured site.

secured-site

But then , when my app in .NET Core tries to download a file from the site it gives:

---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: PartialChain

I assume the error is the same that IIS is showing when saving the binding.

CW92 commented 3 years ago

I think the issue with .Net Core is It looks like the Subject Alternate Name for the certificate in IIS is "2021-06-24.localtest.me" whereas the binding is localhost which is causing a mismatch preventing the .Net Core application from trusting the certificate.

However I have also found this can be due to the server not trusting the Certificate, to fix this I normally copy the Certificate (and any parents) into Trusted Root CA folder (In MMC) however recently on occasion I have had to add them to Trusted People as well.

martinib77 commented 3 years ago

Installing on Trusted Root CA folder (In MMC) solved the issue !

Trusted Root CA folder

After installing the generated localhost.pfx certificate, IIS doesn't give the warning message anymore, and .NET Core also trust the certificate.

It looks like the Subject Alternate Name for the certificate in IIS is "2021-06-24.localtest.me" whereas the binding is localhost which is causing a mismatch preventing the .Net Core application from trusting the certificate The moment i solve the IIS error, it gives me the name mismatch, but generating again the certificate for localhost solved the problem