Problemen met SSL oplossen (servercertificaat)
Van toepassing op: Internet Information Services
Overzicht
Dit artikel helpt u alleen bij het oplossen van SSL-problemen (Secure Sockets Layer) met betrekking tot IIS (Internet Information Services). Het omvat servercertificaten die worden gebruikt voor serververificatie, niet clientcertificaten.
Als de sectie Clientcertificaten is ingesteld op Vereisen en u problemen ondervindt, is dit artikel niet degene die u moet raadplegen. Dit artikel is alleen bedoeld voor het oplossen van het probleem met SSL Server-certificaten.
Het is belangrijk om te weten dat elk certificaat bestaat uit een openbare sleutel (gebruikt voor versleuteling) en een persoonlijke sleutel (gebruikt voor ontsleuteling). De persoonlijke sleutel is alleen bekend bij de server.
De standaardpoort voor HTTPS is 443. Er wordt van uitgegaan dat u vertrouwd bent met SSL Handshake en het serververificatieproces tijdens de SSL-handshake.
Hulpprogramma's die in deze probleemoplosser worden gebruikt
De hulpprogramma's voor het oplossen van problemen met de verschillende scenario's zijn:
- Network Monitor 3.4
- Wireshark
Scenario's
U ziet het volgende foutbericht tijdens het bladeren door een website via HTTPS:
De eerste vereiste die moet worden gecontroleerd, is of de website toegankelijk is via HTTP. Als dit niet het probleem is, is er waarschijnlijk een afzonderlijk probleem dat niet in dit artikel wordt behandeld. Voordat u deze probleemoplosser gebruikt, moet u de website operationeel hebben op HTTP.
Stel nu dat de website toegankelijk is via HTTP en dat het vorige foutbericht wordt weergegeven wanneer u via HTTPS probeert te bladeren. Het foutbericht wordt weergegeven omdat de SSL-handshake is mislukt. Er kunnen veel redenen zijn die in de volgende scenario's worden beschreven.
Scenario 1
Controleer of het servercertificaat de persoonlijke sleutel bevat die overeenkomt met het certificaat. Zie de volgende schermopname van het dialoogvenster Certificaat:
Oplossing
Als de persoonlijke sleutel ontbreekt, moet u een certificaat ophalen dat de persoonlijke sleutel bevat. Dit is in feite een . PFX-bestand . Hier volgt een opdracht die u kunt uitvoeren om de persoonlijke sleutel te koppelen aan het certificaat:
C:\>certutil - repairstore my "906c9825e56a13f1017ea40eca770df4c24cb735"
Als de koppeling is geslaagd, ziet u het volgende venster:
In dit voorbeeld 906c9825e56a13f1017ea40eca770df4c24cb735
is dit de vingerafdruk van het certificaat. Voer de volgende stappen uit om de vingerafdruk op te halen:
- Open het certificaat.
- Klik op het tabblad Details.
- Schuif omlaag om de vingerafdruksectie te vinden.
- Selecteer de vingerafdruksectie en selecteer de tekst eronder.
- Voer een Ctrl+A en vervolgens Ctrl+C uit om deze te selecteren en te kopiëren.
Notitie
De certutil
opdracht kan niet altijd slagen. Als dit mislukt, moet u een certificaat ophalen met de persoonlijke sleutel van de certificeringsinstantie (CA).
Scenario 2
Houd er in dit scenario rekening mee dat u een servercertificaat hebt dat de persoonlijke sleutel bevat die op de website is geïnstalleerd. U blijft echter de fout zien die wordt weergegeven in scenario 1. U hebt nog steeds geen toegang tot de website via HTTPS.
Oplossing
Als u een certificaat hebt dat de persoonlijke sleutel bevat, maar u geen toegang hebt tot de website, ziet u mogelijk ook de volgende SChannel-waarschuwing in de systeemgebeurtenislogboeken:
Event Type: Error
Event Source: Schannel
Event Category: None
Event ID: 36870
Date: 2/11/2012
Time: 12:44:55 AM
User: N/A
Computer:
Description: A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x80090016.
Deze gebeurtenis of fout geeft aan dat er een probleem is opgetreden bij het verkrijgen van de persoonlijke sleutel van het certificaat. Volg deze stappen om de waarschuwing op te lossen:
Controleer de machtigingen voor de map MachineKeys . Alle persoonlijke sleutels worden opgeslagen in de map MachineKeys , dus zorg ervoor dat u over de benodigde machtigingen beschikt.
Als de machtigingen aanwezig zijn en het probleem nog steeds niet is opgelost, is er mogelijk een probleem met het certificaat. Het is mogelijk beschadigd. Mogelijk ziet u een foutcode
0x8009001a
in het volgende gebeurtenislogboek van SChannel:Event Type: Error Event Source: Schannel Event Category: None Event ID: 36870 Date: 2/11/2012 Time: 12:44:55 AM User: N/A Computer: A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x8009001a.
Controleer of de website werkt met een testcertificaat.
Maak een back-up van het bestaande certificaat en vervang het door een zelfondertekend certificaat.
Probeer toegang te krijgen tot de website via HTTPS.
Als het werkt, is het certificaat dat eerder is gebruikt beschadigd en moet het worden vervangen door een nieuw werkend certificaat. Soms is het probleem mogelijk niet bij het certificaat, maar bij de verlener. Tijdens de verificatie van de certificaatketen ziet u mogelijk de fout
CERT_E_UNTRUSTEDROOT (0x800b0109)
als het basis-CA-certificaat niet wordt vertrouwd.Als u deze fout wilt oplossen, voegt u het certificaat van de CA toe aan het archief vertrouwde basis-CA onder Mijn computeraccount op de server. Tijdens de verificatie van de certificaatketen krijgt u mogelijk ook de fout
-2146762480(0x800b0110)
.Volg deze stappen om het gebruikstype van het certificaat te controleren om de fout op te lossen:
- Open het certificaat.
- Klik op het tabblad Details.
- Selecteer Eigenschappen bewerken.
- Controleer op het tabblad Algemeen of de optie Alle doeleinden voor deze certificaatoptie inschakelen is geselecteerd en het belangrijkste is dat de serververificatie aanwezig moet zijn in de lijst.
Scenario 3
De eerste twee scenario's helpen de integriteit van het certificaat te controleren. Nadat u hebt bevestigd dat er geen problemen zijn met het certificaat, wordt een groot probleem opgelost. Maar wat als de website nog steeds niet toegankelijk is via HTTPS? Controleer de HTTPS-bindingen van de website en bepaal op welke poort en WELK IP-adres het luistert.
Oplossing
Voer de volgende opdracht uit om ervoor te zorgen dat er geen ander proces luistert op de SSL-poort die door de website wordt gebruikt.
netstat -ano" or "netstat -anob"
Als er een ander proces op die poort luistert, controleert u waarom dat proces die poort gebruikt.
Probeer de combinatie van IP-poort te wijzigen om te controleren of de website toegankelijk is.
Scenario 4
U kunt er nu zeker van zijn dat u een correct werkend certificaat op de website hebt geïnstalleerd en dat er geen ander proces is met behulp van de SSL-poort voor deze website. Mogelijk ziet u echter nog steeds de fout 'Pagina kan niet worden weergegeven' tijdens het openen van de website via HTTPS. Wanneer een client verbinding maakt en een SSL-onderhandeling initieert, zoekt HTTP.sys de SSL-configuratie ervan naar het paar IP:Poort waarmee de client is verbonden. De HTTP.sys SSL-configuratie moet een certificaat-hash bevatten en de naam van het certificaatarchief voordat de SSL-onderhandeling slaagt. Het probleem kan bij de HTTP.SYS SSL Listener
.
De certificaat-hash die is geregistreerd bij HTTP.sys is mogelijk NULL of bevat mogelijk een ongeldige GUID.
Oplossing
Voer de volgende opdracht uit:
netsh http show ssl
Hier volgen voorbeelden van werkende en niet-werkende scenario's:
Werkend scenario
Configuratie Instelling IP:poort 0.0.0.0:443 Certificaat-hash c09b416d6b 8d615db22 64079d15638e96823d Toepassings-id {4dc3e181-e14b-4a21-b022-59fc669b0914} Naam van certificaatarchief Mijn Certificaatintrekking van client controleren Ingeschakeld Intrekkingstijd voor versheid 0 Time-out voor ophalen van URL 0 ...... ...... Niet-werkend scenario
Configuratie Instelling IP:poort 0.0.0.0:443 Certificaat-hash Toepassings-id {00000000-0000-0000-0000-000000000000} CertStoreName Mijn Certificaatintrekking van client controleren 0 Intrekkingstijd voor versheid 0 Time-out voor ophalen van URL 0 ...... ...... De hashwaarde die in het werkscenario wordt weergegeven, is de vingerafdruk van uw SSL-certificaat. U ziet dat de GUID allemaal nul is in een niet-werkend scenario. Mogelijk ziet u dat de hash een bepaalde waarde heeft of leeg is. Zelfs als u het certificaat van de website verwijdert en vervolgens uitvoert
netsh http show ssl
, geeft de website nog steeds de GUID weer als alle 0's. Als u de GUID ziet als {0000...............000}, is er een probleem.Verwijder deze vermelding door de volgende opdracht uit te voeren:
netsh http delete sslcert ipport=<IP Address>:<Port>
Bijvoorbeeld:
netsh http delete sslcert ipport=0.0.0.0:443
Als u wilt bepalen of er IP-adressen worden vermeld, opent u een opdrachtprompt en voert u de volgende opdracht uit:
netsh http show iplisten
Als de opdracht een lijst met IP-adressen retourneert, verwijdert u elk IP-adres in de lijst met de volgende opdracht:
netsh http delete iplisten ipaddress=<IP Address>
Notitie
Start IIS hierna opnieuw met behulp van de
net stop http /y
opdracht.
Scenario 5
Ondanks dit alles, als u nog steeds niet door de website op HTTPS kunt bladeren, legt u een netwerktracering vast van de client of server. Filter de tracering op SSL of TLS om SSL-verkeer te bekijken.
Hier volgt een momentopname van een netwerktracering van een niet-werkend scenario:
Hier volgt een momentopname van een netwerktracering van een werkend scenario:
Dit is de methode van hoe u een netwerktracering bekijkt. U moet de framedetails uitvouwen en zien welk protocol en codering door de server zijn gekozen. Selecteer 'Server Hello' in de beschrijving om deze details weer te geven.
In het niet-werkende scenario is de client alleen geconfigureerd voor het gebruik van TLS 1.1 en TLS 1.2. De IIS-webserver is echter geconfigureerd voor ondersteuning tot TLS 1.0, dus de handshake is mislukt.
Controleer de registersleutels om te bepalen welke protocollen zijn ingeschakeld of uitgeschakeld. Dit is het pad:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
De ingeschakelde DWORD moet worden ingesteld op 1. Als het is ingesteld op 0, wordt het protocol uitgeschakeld.
SSL 2.0 is bijvoorbeeld standaard uitgeschakeld.