IIS Express 10 localhost SSL-certificaat resetten
26/03/21, 20:48 | 2 minuten | reacties
Handleiding over hoe je je localhost SSL-certificaat voor IIS Express 10 opnieuw instelt.
Broncode
Snel testproject in .NET Web API om het probleem te reproduceren, op te lossen en te controleren of alles weer werkt:
https://github.com/steffbeckers/iis-express-ssl-reset-test
Probleem
Tijdens het uitvoeren van een testproject in .NET Web API via IIS Express is de site op https://localhost:... niet bereikbaar of verschijnt een foutmelding zoals "ongeldig SSL-certificaat".


Maar als we de API via Kestrel starten, werkt de site wél correct.


Of misschien werkt het voor jou zelfs dan nog niet.
Oplossing
Stap 1: Verwijder alle localhost-certificaten
Open Windows Certificaatbeheer door te zoeken naar "certificaat" en kies "Gebruikerscertificaten beheren".

Verwijder alle localhost-certificaten in de map "Persoonlijk/Certificaten".

Verwijder ook alle localhost-certificaten in "Vertrouwde basiscertificeringsinstanties/Certificaten".

Doe nu hetzelfde voor de certificaten van de lokale computer:



Stap 2: Gebruik de IIS Express admin CLI
Open een nieuw PowerShell- of cmd-venster als Administrator (met verhoogde rechten).
Navigeer naar de IIS Express-installatiemap:
cd "C:\Program Files (x86)\IIS Express"
Voer nu het volgende commando uit om het SSL-certificaat opnieuw in te stellen. Pas het poortnummer aan aan je eigen project:
./IisExpressAdminCmd.exe setupsslUrl -url:https://localhost:44321/ -UseSelfSigned
Je zou nu de volgende uitvoer moeten zien:

Stap 3: Herstart Visual Studio
Zorg dat je Visual Studio opnieuw opstart, dit sluit ook IIS Express af.
Stap 4: Start je applicatie opnieuw via IIS Express
Selecteer IIS Express in je debug-configuratie en start de applicatie.
Je zou nu een pop-up moeten krijgen om het nieuw aangemaakte, zelfondertekende SSL-certificaat voor je localhost-app te vertrouwen. Kies "Ja" om het te vertrouwen.

Daarna volgt een beveiligingswaarschuwing. Kies "Ja" om het certificaat te installeren.

Na installatie zou de applicatie correct moeten starten en is het SSL-probleem verholpen.
Je ziet nu de boodschap "Application started ..." in het Uitvoer-venster van Visual Studio:

Navigeer nu naar de webpagina om te testen of het SSL-certificaat werkt:
https://localhost:44321/swagger

Aanvulling 31/03/2021
Bekijk ook deze GitHub Gist:
https://gist.github.com/camieleggermont/5b2971a96e80a658863106b21c479988
Dit PowerShell-script genereert een nieuw certificaat, verwijdert oude SSL-koppelingen van IIS Express en voegt het nieuw gegenereerde certificaat toe. Het certificaat wordt ook toegevoegd aan de Trusted Root Certification Authorities.
$cert = New-SelfSignedCertificate -DnsName "localhost", "localhost" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter (Get-Date).AddYears(5)
$thumb = $cert.GetCertHashString()
For ($i=44300; $i -le 44399; $i++) {
netsh http delete sslcert ipport=0.0.0.0:$i
}
For ($i=44300; $i -le 44399; $i++) {
netsh http add sslcert ipport=0.0.0.0:$i certhash=$thumb appid=`{214124cd-d05b-4309-9af9-9caa44b2b74a`}
}
$StoreScope = 'LocalMachine'
$StoreName = 'root'
$Store = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Store -ArgumentList $StoreName, $StoreScope
$Store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$Store.Add($cert)
$Store.Close()
Dit kan helpen om SSL-certificaten in de IIS Express-poortreeks 44300–44399 volledig te resetten. Vergeet niet om PowerShell als Administrator te openen.