Condividi tramite


Risoluzione dei problemi correlati a SSL (certificato server)

Si applica a: Internet Information Services 6.0, Internet Information Services 7.0 e versioni successive

Panoramica

Questo articolo illustra come risolvere i problemi ssl (Secure Sockets Layer) correlati solo a Internet Information Services (IIS). Copre i certificati server destinati all'autenticazione server e non copre i certificati client.

Se la sezione Certificati client è impostata su "Richiedi" e quindi si verificano problemi, questo non è l'articolo da 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:

  • SSLDiag
  • Monitoraggio di rete 3.4 o 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. Internet Explorer non può visualizzare la pagina Web.

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 "[U+200E] 1a 1f 94 8b 21 a2 99 36 77 a8 8e b2 3f 42 8c 7e 47 e3 d1 33"

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 è 1a 1f 94 8b 21 a2 99 36 77 a8 8e b2 3f 42 8c 7e 47 e3 d1 33 l'identificazione personale del certificato. Per ottenere l'identificazione personale:

  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 fare clic sul testo seguente.
  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.

Nota

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

  1. Scaricare e installare lo strumento di diagnostica SSL nel server.

  2. Se si dispone di un certificato che contiene la chiave privata e non è ancora possibile accedere al sito Web, provare a eseguire questo strumento o controllare i registri eventi di sistema per individuare gli avvisi o gli errori correlati a SChannel.

    Durante l'esecuzione dello strumento SSLDiag, è possibile che venga visualizzato il messaggio di errore seguente:

    Si dispone di una chiave privata che corrisponde a questo certificato ma CryptAcquireCertificatePrivateKey non è riuscita.

    Screenshot della finestra Diagnostica SSL. Il messaggio di errore è evidenziato.

    Inoltre, nei registri eventi di sistema verrà visualizzato l'avviso 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: 
    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. Provare quindi i passaggi seguenti per risolvere l'avviso:

  3. Prima di tutto, 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.

  4. 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 di 0x8009001a nel 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. 
    
  5. Controllare se il sito Web funziona con un certificato di test.

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

  7. 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. È possibile che venga visualizzato l'errore seguente in SSLDiag:

    Screenshot della finestra Diagnostica SSL, il messaggio di errore è evidenziato.

    CertVerifyCertificateChainPolicy avrà esito negativo con CERT_E_UNTRUSTEDROOT (0x800b0109), se il certificato CA radice non è una radice attendibile.

  8. Per correggere questo errore, aggiungere il certificato della CA all'archivio "CA radice attendibile" in Account computer nel server. È anche possibile che venga visualizzato l'errore seguente:

    CertVerifyCertificateChainPolicy ha restituito l'errore -2146762480(0x800b0110).

  9. Per risolvere l'errore, controllare il tipo di utilizzo del certificato seguendo questa procedura:

    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'autenticazione server 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. È possibile che il problema si verifichi con .HTTP.SYS SSL Listener

L'hash del certificato registrato con HTTP.sys può essere NULL oppure può contenere GUID non validi.

Risoluzione

  1. Eseguire il comando seguente:

    IIS 6: "httpcfg.exe query ssl"
    IIS 7/7.5: "netsh http show ssl"
    

    Nota

    HttpCfg fa parte degli strumenti di supporto di Windows ed è presente nel disco di installazione.

    Di seguito è riportato un esempio di scenario funzionante e non funzionante:

    Scenario di lavoro

    Configurazione Impostazione
    IP 0.0.0.0:443
    Hash c09b416d6b 8d615db22 64079d15638e96823d
    GUID {4dc3e181-e14b-4a21-b022-59fc669b0914}
    CertStoreName MY
    CertCheckMode 0
    RevocationFreshnessTime 0
    UrlRetrievalTimeout 0
    SslCtlIdentifier 0
    SslCtlStoreName 0
    Flag 0

    Scenario non funzionante

    Configurazione Impostazione
    IP 0.0.0.0:443
    Hash
    GUID {00000000-0000-0000-0000-000000000000}
    CertStoreName MY
    CertCheckMode 0
    RevocationFreshnessTime 0
    UrlRetrievalTimeout 0
    SslCtlIdentifier 0
    SslCtlStoreName 0
    Flag 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. L'hash può essere visualizzato con un valore o vuoto. Anche se si rimuove il certificato dal sito Web e quindi si esegue httpcfg query ssl, il sito Web continuerà ad 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:

    httpcfg delete ssl -i "IP:Port Number"
    

    Ad esempio:

    httpcfg delete ssl -i 0.0.0.0:443
    
  3. Per determinare se sono elencati indirizzi IP, aprire un prompt dei comandi e quindi eseguire i comandi seguenti:

    IIS 6: httpcfg query iplisten
    
    IIS 7/7.5: netsh http show iplisten
    

    Se l'elenco di ascolti IP è vuoto, il comando restituisce la stringa seguente:

    HttpQueryServiceConfiguration completed with 1168.
    

    Se il comando restituisce un elenco di indirizzi IP, rimuovere ogni indirizzo IP nell'elenco usando il comando seguente:

    httpcfg delete iplisten -i x.x.x.x
    

    Nota

    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.

Di seguito è riportato uno snapshot di traccia di rete di uno scenario non funzionante:

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

Di seguito è riportato 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 era IIS 6, che può supportare fino a TLS 1.0 e 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

La DWORD "Enabled" deve essere impostata su "1". Se è impostato su 0, il protocollo è disabilitato.

Ad esempio, SSL 2.0 è disabilitato per impostazione predefinita.

Scenario 6

Se tutto è stato verificato e se si verificano ancora problemi di accesso al sito Web tramite HTTPS, è molto probabile che si tratti di un aggiornamento, che causa l'esito negativo dell'handshake SSL.

Microsoft ha rilasciato un aggiornamento all'implementazione di SSL in Windows:

MS12-006: Vulnerability in SSL/TLS could allow information disclosure: January 10, 2012

È possibile che questo aggiornamento influisca sull'uso di Internet Explorer o sull'uso di un'applicazione che usa Internet Explorer per eseguire richieste HTTPS.

In realtà sono state apportate due modifiche per risolvere la vulnerabilità di divulgazione delle informazioni in SSL 3.0 / TLS 1.0. L'aggiornamento MS12-006 implementa un nuovo comportamento in schannel.dll, che invia un record aggiuntivo quando si usa una crittografia a blocchi concatenati SSL comune, quando i client richiedono tale comportamento. L'altra modifica era in Wininet.dll, parte dell'aggiornamento cumulativo di dicembre per Internet Explorer (MS11-099), in modo che Internet Explorer richiederà il nuovo comportamento.

Se esiste un problema, può manifestarsi come errore di connessione a un server o una richiesta incompleta. Internet Explorer 9 e versioni successive è in grado di visualizzare un errore "Internet Explorer non può visualizzare la pagina Web". Le versioni precedenti di Internet Explorer possono visualizzare una pagina vuota.

Fiddler non usa il record aggiuntivo quando acquisisce e inoltra le richieste HTTPS al server. Pertanto, se Fiddler viene usato per acquisire il traffico HTTPS, le richieste avranno esito positivo.

Chiavi del Registro di sistema

Come documentato in MS12-006: La vulnerabilità in SSL/TLS potrebbe consentire la divulgazione di informazioni: 10 gennaio 2012, è presente un valore del Registro di sistema SendExtraRecord, che può:

  • Disabilitare globalmente il nuovo comportamento SSL,
  • Abilitarlo a livello globale o
  • (Per impostazione predefinita) abilitarlo per i client SChannel che scelgono il nuovo comportamento.

Per Internet Explorer e per i client che utilizzano componenti di Internet Explorer, è presente una chiave del Registro di sistema nella sezione FeatureControl, FEATURE_SCH_SEND_AUX_RECORD_KB_2618444, che determina se iexplore.exe o qualsiasi altra applicazione denominata sceglie il nuovo comportamento. Per impostazione predefinita, questa opzione è abilitata per Internet Explorer e disabilitata per altre applicazioni.

Ulteriori informazioni