Condividi tramite


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:

Screenshot di una pagina del browser che mostra il messaggio, la connessione per questo sito non è sicura.

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:

Due screenshot della finestra di dialogo Certificato. Uno non ha una chiave privata. L'altro mostra un messaggio che indica che la chiave privata corrisponde al 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"

Screenshot della console dei comandi che mostra la sintassi certutil.

Se l'associazione ha esito positivo, verrà visualizzata la finestra seguente:

Screenshot della console dei comandi che mostra un messaggio che indica che il comando è stato completato correttamente.

In questo esempio è 906c9825e56a13f1017ea40eca770df4c24cb735 l'identificazione personale del certificato. Per ottenere l'identificazione personale, seguire questa procedura:

  1. Aprire il certificato.
  2. Selezionare la scheda Dettagli.
  3. Scorrere verso il basso per trovare la sezione identificazione personale.
  4. Selezionare la sezione identificazione personale e selezionare il testo sotto di esso.
  5. Premere CTRL+A e quindi CTRL+C per selezionarlo e copiarlo.

Screenshot della finestra di dialogo Certificato che mostra la scheda Dettagli. Il valore di identificazione personale è evidenziato.

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:

  1. 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.

  2. 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. 
    
  3. Controllare se il sito Web funziona con un certificato di test.

  4. Eseguire un backup del certificato esistente e sostituirlo con un certificato autofirmato.

  5. 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.

  6. 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).

  7. Per risolvere l'errore, seguire questa procedura per controllare il tipo di utilizzo del certificato:

    1. Aprire il certificato.
    2. Selezionare la scheda Dettagli.
    3. Selezionare Modifica proprietà.
    4. 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.

    Screenshot che mostra una parte della finestra di dialogo Proprietà certificato in cui è selezionata l'opzione Abilita tutti gli scopi per questo certificato.

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

  1. 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"
    
  2. Se è presente un altro processo in ascolto su tale porta, verificare il motivo per cui il processo usa tale porta.

  3. 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

  1. 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.

  2. 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
    
  3. 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:

Screenshot della finestra Visualizza filtro che mostra lo snapshot di traccia.

Ecco uno snapshot di traccia di rete di uno scenario di lavoro:

Screenshot della finestra Visualizza filtro che mostra uno snapshot di una traccia riuscita.

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.

Ulteriori informazioni