Risoluzione dei problemi correlati a SSL (certificato server)
Si applica a: Internet Information Services
Panoramica
Questo articolo illustra come risolvere i problemi ssl (Secure Sockets Layer) correlati solo a Internet Information Services (IIS). Vengono illustrati i certificati server usati per l'autenticazione server, non i certificati client.
Se la sezione Certificati client è impostata su Richiedi e si verificano problemi, questo articolo non è quello a cui fare riferimento. Questo articolo è destinato alla risoluzione dei problemi relativi solo ai certificati del server SSL.
È importante sapere che ogni certificato comprende una chiave pubblica (usata per la crittografia) e una chiave privata (usata per la decrittografia). La chiave privata è nota solo al server.
La porta predefinita per HTTPS è 443. Si presuppone che l'handshake SSL e il processo di autenticazione del server siano ben descritti durante l'handshake SSL.
Strumenti usati in questo strumento di risoluzione dei problemi
Gli strumenti usati per risolvere i problemi relativi ai vari scenari sono:
- Network Monitor 3.4
- Wireshark
Scenari
Viene visualizzato il messaggio di errore seguente durante l'esplorazione di un sito Web tramite HTTPS:
Il primo prerequisito che deve essere verificato è se il sito Web è accessibile tramite HTTP. In caso contrario, è probabile che si verifichi un problema separato non trattato in questo articolo. Prima di usare questo strumento di risoluzione dei problemi, è necessario che il sito Web sia operativo su HTTP.
Si supponga ora che il sito Web sia accessibile tramite HTTP e che venga visualizzato il messaggio di errore precedente quando si tenta di esplorare HTTPS. Viene visualizzato il messaggio di errore perché l'handshake SSL non è riuscito. Esistono molti motivi che sono descritti in dettaglio nei prossimi scenari.
Scenario 1
Controllare se il certificato del server ha la chiave privata corrispondente. Vedere lo screenshot seguente della finestra di dialogo Certificato:
Risoluzione
Se manca una chiave privata, è necessario ottenere un certificato contenente la chiave privata, che è essenzialmente un oggetto . File PFX . Ecco un comando che è possibile provare a eseguire per associare la chiave privata al certificato:
C:\>certutil - repairstore my "906c9825e56a13f1017ea40eca770df4c24cb735"
Se l'associazione ha esito positivo, verrà visualizzata la finestra seguente:
In questo esempio è 906c9825e56a13f1017ea40eca770df4c24cb735
l'identificazione personale del certificato. Per ottenere l'identificazione personale, seguire questa procedura:
- Aprire il certificato.
- Selezionare la scheda Dettagli.
- Scorrere verso il basso per trovare la sezione identificazione personale.
- Selezionare la sezione identificazione personale e selezionare il testo sotto di esso.
- Premere CTRL+A e quindi CTRL+C per selezionarlo e copiarlo.
Note
Il certutil
comando potrebbe non avere sempre esito positivo. In caso di errore, è necessario ottenere un certificato contenente la chiave privata dall'autorità di certificazione (CA).
Scenario 2
In questo scenario, si consideri di avere un certificato server che contiene la chiave privata installata nel sito Web. Tuttavia, si continua a visualizzare l'errore visualizzato nello scenario 1. Non è ancora possibile accedere al sito Web tramite HTTPS.
Risoluzione
Se si dispone di un certificato che contiene la chiave privata, ma non è possibile accedere al sito Web, è anche possibile che venga visualizzato l'avviso SChannel seguente nei registri eventi di sistema:
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.
Questo evento o errore indica che si è verificato un problema durante l'acquisizione della chiave privata del certificato. Per risolvere l'avviso, seguire questa procedura:
Verificare le autorizzazioni per la cartella MachineKeys . Tutte le chiavi private vengono archiviate all'interno della cartella MachineKeys , quindi assicurarsi di disporre delle autorizzazioni necessarie.
Se le autorizzazioni sono state applicate e se il problema non è ancora stato risolto, potrebbe verificarsi un problema con il certificato. Potrebbe essere stato danneggiato. È possibile che venga visualizzato un codice di errore nel
0x8009001a
registro eventi SChannel seguente: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.
Controllare se il sito Web funziona con un certificato di test.
Eseguire un backup del certificato esistente e sostituirlo con un certificato autofirmato.
Provare ad accedere al sito Web usando HTTPS.
Se funziona, il certificato usato in precedenza è danneggiato e deve essere sostituito con un nuovo certificato funzionante. In alcuni casi, il problema potrebbe non essere con il certificato, ma con l'emittente. Durante la verifica della catena di certificati, è possibile che venga visualizzato l'errore
CERT_E_UNTRUSTEDROOT (0x800b0109)
se il certificato CA radice non è radice attendibile.Per correggere questo errore, aggiungere il certificato della CA all'archivio CA radice attendibile in Account computer nel server. Durante la verifica della catena di certificati, è anche possibile che venga visualizzato l'errore
-2146762480(0x800b0110)
.Per risolvere l'errore, seguire questa procedura per controllare il tipo di utilizzo del certificato:
- Aprire il certificato.
- Selezionare la scheda Dettagli.
- Selezionare Modifica proprietà.
- Nella scheda Generale verificare che l'opzione Abilita tutti gli scopi per questo certificato sia selezionata e, soprattutto, l'autenticazioneserver deve essere presente nell'elenco.
Scenario 3
I primi due scenari consentono di controllare l'integrità del certificato. Dopo aver verificato che non ci sono problemi con il certificato, viene risolto un problema ridimensionabile. Ma cosa succede se il sito Web non è ancora accessibile tramite HTTPS? Controllare le associazioni HTTPS del sito Web e determinare la porta e l'INDIRIZZO IP su cui è in ascolto.
Risoluzione
Eseguire il comando seguente per assicurarsi che nessun altro processo sia in ascolto sulla porta SSL usata dal sito Web.
netstat -ano" or "netstat -anob"
Se è presente un altro processo in ascolto su tale porta, verificare il motivo per cui il processo usa tale porta.
Provare a modificare la combinazione di porta IP per verificare se il sito Web è accessibile.
Scenario 4
A questo punto, è possibile assicurarsi di disporre di un certificato funzionante appropriato installato nel sito Web e che non ci sia altro processo usando la porta SSL per questo sito Web. Tuttavia, potrebbe essere visualizzato l'errore "Impossibile visualizzare la pagina" durante l'accesso al sito Web tramite HTTPS. Quando un client si connette e avvia una negoziazione SSL, HTTP.sys cerca la coppia "IP:Port" alla quale è connesso il client. La configurazione SSL HTTP.sys deve includere un hash del certificato e il nome dell'archivio certificati prima che la negoziazione SSL abbia esito positivo. Il problema potrebbe verificarsi con .HTTP.SYS SSL Listener
L'hash del certificato registrato con HTTP.sys potrebbe essere NULL oppure potrebbe contenere GUID non validi.
Risoluzione
Eseguire il comando seguente:
netsh http show ssl
Ecco alcuni esempi di scenari funzionanti e non funzionanti:
Scenario di lavoro
Impostazione Impostazione IP:port 0.0.0.0:443 Hash del certificato c09b416d6b 8d615db22 64079d15638e96823d ID applicazione {4dc3e181-e14b-4a21-b022-59fc669b0914} Nome archivio certificati My Verificare la revoca dei certificati client Attivata Tempo di aggiornamento della revoca 0 Timeout recupero URL 0 ...... ...... Scenario non funzionante
Impostazione Impostazione IP:port 0.0.0.0:443 Hash del certificato ID applicazione {00000000-0000-0000-0000-000000000000} CertStoreName My Verificare la revoca dei certificati client 0 Tempo di aggiornamento della revoca 0 Timeout recupero URL 0 ...... ...... Il valore hash visualizzato nello scenario di lavoro è l'identificazione personale del certificato SSL. Si noti che il GUID è tutto zero in uno scenario non funzionante. È possibile che l'hash abbia un valore o sia vuoto. Anche se si rimuove il certificato dal sito Web e quindi si esegue
netsh http show ssl
, il sito Web continuerà a elencare il GUID come tutti gli 0. Se il GUID viene visualizzato come "{0000...............000}", si è verificato un problema.Rimuovere questa voce eseguendo il comando seguente:
netsh http delete sslcert ipport=<IP Address>:<Port>
Ad esempio:
netsh http delete sslcert ipport=0.0.0.0:443
Per determinare se sono elencati indirizzi IP, aprire un prompt dei comandi e quindi eseguire il comando seguente:
netsh http show iplisten
Se il comando restituisce un elenco di indirizzi IP, rimuovere ogni indirizzo IP nell'elenco usando il comando seguente:
netsh http delete iplisten ipaddress=<IP Address>
Note
Riavviare IIS dopo l'utilizzo del
net stop http /y
comando .
Scenario 5
Nonostante tutto questo, se non è ancora possibile esplorare il sito Web su HTTPS, acquisire una traccia di rete dal client o dal server. Filtrare la traccia in base a "SSL o TLS" per esaminare il traffico SSL.
Ecco uno snapshot di traccia di rete di uno scenario non funzionante:
Ecco uno snapshot di traccia di rete di uno scenario di lavoro:
Questo è il metodo di visualizzazione di una traccia di rete. È necessario espandere i dettagli del frame e vedere quale protocollo e crittografia è stato scelto dal server. Selezionare "Server Hello" nella descrizione per visualizzare i dettagli.
Nello scenario non funzionante, il client è stato configurato per l'uso solo di TLS 1.1 e TLS 1.2. Tuttavia, il server Web IIS è stato configurato per supportare fino a TLS 1.0, quindi l'handshake non è riuscito.
Controllare le chiavi del Registro di sistema per determinare quali protocolli sono abilitati o disabilitati. Ecco il percorso:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
L'opzione DWORD abilitata deve essere impostata su 1. Se è impostato su 0, il protocollo è disabilitato.
Ad esempio, SSL 2.0 è disabilitato per impostazione predefinita.