Autenticazione reciproca e autorizzazione con certificati di varie CA

0

Modifica Dopo aver letto questa domanda e risposta ho un po ' più di una comprensione. La mia domanda ora è: posso usare un certificato che un utente abbia firmato da una CA registrata come VeriSign, GoDaddy, ecc., Invece di firmare un certificato da solo? In tal caso, quale meccanismo devo usare per verificarlo? CRL o OCSP avranno i dettagli di tutte le CA o dovrò controllare i loro registri individuali?

originale: Mi piacerebbe sapere come si verifica la validità dei certificati di varie CA ai fini dell'autenticazione reciproca su un sito Web o se si tratta di un problema da considerare?

Sono in procinto di apprendere l'autenticazione reciproca e come funziona, insieme alla firma dei certificati in generale, quindi qualsiasi suggerimento o riferimento da leggere per aiutare a comprendere questo argomento sarebbe apprezzato.

Attualmente ho un semplice server Ubuntu in esecuzione in un VirtualBox che sto usando per sperimentare. Questo sta eseguendo nginx e mysql, entrambi sono configurati per richiedere TLS / SSL. Il prossimo passo che voglio implementare è l'autenticazione reciproca tra nginx e il browser client; L'ho installato con successo sul server utilizzando un certificato CA autofirmato. Tuttavia, sto cercando di capire come viene verificato il certificato inviato dal browser.

Ho una coppia di chiavi pubblica / privata sul sistema operativo host e potrei generare una richiesta di firma del certificato e inviarla al server guest, che potrebbe firmare il certificato CA e restituirlo al mio host. Questo certificato sarà firmato, ma non da una CA registrata. Facendo un ulteriore passo avanti, ora visito un altro sito Web che non controllo: deve firmare anche il mio certificato?

La mia comprensione è che una volta che un certificato è stato firmato, non è necessario che venga firmato di nuovo tranne che per il rinnovo. Questo è vero solo se firmato da una CA registrata come GoDaddy, CACert, ecc. Pertanto, tornando al mio sito Web, come faccio a sapere se si tratta di un certificato valido? Se utilizzo CRL o OCSP per verificare se è stato revocato o meno, controllerà tutti i provider o solo la società che gestisce la lista / il server?

Supponendo che in un modo o nell'altro io possa convalidare l'autenticità del certificato, come faccio a usarlo per autenticare (o, suppongo in modo più accurato, autorizzare) l'utente specifico? Devo memorizzare una copia della loro chiave pubblica e verificare in questo modo o è possibile estrarre alcuni dettagli unici che mi consentano di autorizzarli?

Questa è una nuova area per me e ho indubbiamente avanzato alcune ipotesi errate, oltre a mettere in luce alcune lacune nella mia conoscenza e comprensione dell'argomento. Apprezzerei qualsiasi risposta che possa aiutare a correggerli. Inoltre, se la domanda non è abbastanza specifica per le regole del forum, mi scuso e qualsiasi guida su come inquadrarlo meglio in modo da non violare le regole sarebbe utile.

    
posta Ashley Bye 17.01.2016 - 18:05
fonte

1 risposta

2

L'autenticazione reciproca / client tramite certificati non è una configurazione comune, quindi potresti non trovare molte informazioni su questo argomento, ad es. per nginx , come potresti aspettarti.

Detto questo, hai chiesto:

  • "Posso utilizzare un certificato che un utente ha firmato da una CA registrata come VeriSign, GoDaddy, ecc. al posto di firmare un certificato da solo?"

Sì. Supponiamo che il tuo cliente abbia un certificato, emesso da una delle suddette CA. Per convincere il cliente a inviare il suo certificato al tuo server ( per esempio nginx ), devi configurare il tuo server con un elenco di CA di cui si fidi. Come parte dell'handshake SSL / TLS, il server "richiede" che il client invii il suo certificato client inviando al client un elenco di CA che il server considera attendibili; il client può quindi scegliere uno (tra i possibili più) certificato che ha un "percorso di fiducia" per quelli di quelle CA che il server considera attendibili.

Ciò significa che sul lato server, è possibile configurare l'elenco di CA di cui ci si fida, utilizzando i relativi certificati (e le chiavi pubbliche); non devi utilizzare le chiavi private delle CA per questo.

  • "In tal caso, quale meccanismo devo utilizzare per verificarlo? CRL o OCSP avranno i dettagli di tutte le CA o dovrò controllare i loro singoli registri?"

OK, è qui che le cose potrebbero essere un po 'complicate. La risposta pratica a questa domanda è "dipende dal software / applicazione che stai utilizzando". Poiché l'autenticazione reciproca / client non è molto comune, molte applicazioni potrebbero non avere la funzionalità CRL / OCSP per la verifica dei certificati client implementata. Ma supponiamo, per amor di discussione, che nginx (o mysql ) possa fare questo.

All'interno di un certificato X509v3, ci sono estensioni che definiscono dove trovare i CRL per verificare quel certificato e / o per definire il risponditore OCSP da contattare per la verifica.

I CRL relativi al certificato presentato devono essere definiti, in tale certificato, dai punti di distribuzione CRL estensione. Esistono molti formati possibili per questa estensione; la documentazione RFC 5280 collegata entra nelle specifiche. Ma questa estensione, se presente, è ciò che qualsiasi software (come il server del tuo sito Web) cercherebbe, al fine di scoprire dove / come ottenere eventuali CRL che potrebbero menzionare questo certificato.

L'URL per il risponditore OCSP da contattare, ad esempio, potrebbe apparire nel "accesso alle informazioni dell'autorità" estensione del certificato. Ad esempio, utilizzando openssl x509 -noout -text < /path/to/cert.pem su un certificato, potresti visualizzare questo visualizzato in questo modo:

Certificate:
    Data:
        Version: 3 (0x2)

        ...

        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE

            ...

            Authority Information Access: 
                OCSP - URI:https://ocsp.example.com

Quindi il server in questione deve analizzare questi attributi / estensioni dal certificato fornito dal client per scoprire chi contattare, per quel certificato, per CRL o dati OCSP per quel certificato. Nella maggior parte dei casi, le AC che firmano / emettono i certificati saranno anche le organizzazioni che mantengono i CRL e / o i risponditori OCSP per tali certificati.

Spero che questo aiuti!

    
risposta data 17.02.2016 - 06:07
fonte

Leggi altre domande sui tag