Va bene se un server non verifica un certificato?

3

Attualmente sto imparando molto su Azure, Azure Active Directory e Azure Key Vault (AKV).

Per iniziare, consulta questo articolo :

In particolare, sono interessato a questa affermazione:

Quando si progetta un'applicazione, tenere presenti i seguenti punti sui certificati di gestione:

  • L'API di gestione dei servizi non verifica che un certificato sia ancora valido. L'autenticazione avrà esito positivo rispetto a un certificato scaduto.

A prima vista, questo mi sembra strano e anche un po 'strano. Io sono solo un newb di sicurezza, tuttavia, e sto cercando qualche chiarimento e approfondimento qui.

Inoltre, sembra che lo stesso stia succedendo con le connessioni certificate a Azure Key Vault. Cioè, posso caricare un certificato non affidabile (ma autofirmato) per il servizio AKV, e mentre non devo verificare il certificato sul lato client (visto sotto), posso effettuare una chiamata con lo stesso certificato a il server e restituirà i dati di conseguenza.

Per alcuni codici, ecco un frammento di questo articolo .

public static class CertificateHelper
{
    public static X509Certificate2 FindCertificateByThumbprint(string findValue)
    {
        X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
        try
        {
            store.Open(OpenFlags.ReadOnly);
            X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindByThumbprint, 
                findValue, false); // Don't validate certs, since the test root isn't installed.
            if (col == null || col.Count == 0)
                return null;
            return col[0];
        }
        finally
        {
            store.Close();
        }
    }
}

Puoi vedere che false è passato al metodo Find in modo che non verifichi il certificato (sul lato client). Questo ha senso fino ad ora (a scopo di test), ma questo certificato non verificato può quindi essere utilizzato per recuperare i dati da Azure Key Vault (in cui il certificato non sembra essere verificato sul server). Vale anche la pena notare che questo certificato è autofirmato e non è stato aggiunto a nessun editore o autorità root attendibile sul client (quindi fallisce se si passa in true al metodo Find sopra), né ha è stato aggiunto a qualsiasi negozio sul server (per quanto ne so). Un pensiero è che potrebbe essere aggiunto a un negozio fidato sul server, ma non ho visto alcuna documentazione su questo.

Quindi, volevo porre questa domanda qui per vedere se questo è considerato un criterio appropriato (e sicuro / sicuro) per non verificare un certificato sul server, e in tal caso, perché? Mi sembra che l'intera ragione per avere un certificato è di verificarlo su entrambi lato client e server.

Grazie in anticipo per qualsiasi chiarimento.

EDIT: soluzione

Dopo la risposta utile di @ Mky, sto modificando / aggiungendo questa domanda con correzioni alla mia comprensione.

In primo luogo, la mia comprensione di cui sopra non è corretta nella seconda parte della domanda. I certificati non vengono caricati in AKV, ma in Azure Active Directory. Per questo motivo, AAD funge da punto di sicurezza e autenticazione. AKV accetta la richiesta del cliente a cui è stato allegato il certificato e quindi autentica con tale certificato su AAD.

Inoltre, in questo intero processo, la chiave privata viene utilizzata durante il processo di autenticazione dal client chiamante (client / applicazione Web) per firmare un messaggio serializzato e codificato creato dalle credenziali del certificato. Pertanto, anche se il certificato potrebbe non essere valido / verificato dall'archivio certificati del client, deve comunque avere la chiave privata installata da cui è stato utilizzato il certificato da creare. Spero che abbia un senso. Io per primo mi sento come se la mia testa girasse da tutto questo!

    
posta Mike-EEE 22.02.2016 - 23:47
fonte

1 risposta

3

È infatti obbligatorio verificare il certificato della persona con cui stai parlando.

Tuttavia, non ha senso che il server verifichi il proprio certificato. Sarebbe come se tu verificassi la tua chiave di casa che ti apre ancora la porta o se hai cambiato le serrature. Nelle normali operazioni, dovresti già saperlo.

Il controllo del certificato del server sul lato server è utile solo per avvisare l'utente del lavoro di manutenzione che deve essere eseguito. Dopo questo, prendi una decisione informata per presentare il certificato che desideri. Rischi il client che non ti autentica e rifiuta di comunicare (quale dovrebbe essere il suo normale comportamento con il certificato errato fornito).

    
risposta data 23.02.2016 - 10:35
fonte

Leggi altre domande sui tag