Come determinare se un certificato X.509 è un rinnovo di un altro certificato conosciuto?

3

Nella mia applicazione, utente umano accetta il certificato X.509 del server , verificando l'impronta digitale durante la prima connessione. L'impronta digitale è memorizzata nel software client . Alle connessioni successive, solo quel particolare certificato è accettato dal client .

Se il server rinnova il proprio certificato, l'impronta digitale naturalmente non corrisponde più e l'utente deve verificare e accettare nuovamente la nuova impronta digitale.

Voglio rilassare questa limitazione e accettare questo certificato e anche qualsiasi rinnovo (forse anche rekey ) di esso.

Il certificato del server viene emesso da una CA, che è attendibile dal software client. Quindi il mio nuovo assegno dal lato del cliente sarà come:

  1. Verificare che l'impronta digitale corrisponda a quella registrata. Accetta la connessione se sì.
  2. Verificare che il certificato sia emesso da una CA attendibile. Rifiuta la connessione se non.
  3. Verifica se questo è un certificato precedente rinnovato, accetta la connessione se sì, rifiuta altrimenti.

Domanda: come può essere implementato l'ultimo controllo? Come posso sapere che un certificato C2 è in realtà un rinnovo (o rekey) di un altro certificato C1?

    
posta Konstantin Shemyak 02.01.2015 - 11:28
fonte

3 risposte

2

Quindi è necessario che la CA o il cliente confermino che il certificato è stato rinnovato. Posso immaginare che ci siano alcuni modi per avvicinarsi a questo ...

Rinnovo + stesso soggetto

Un cliente che detiene il vecchio certificato e il nuovo certificato potrebbe utilizzare la chiave privata di ciascun certificato e firmare il nuovo certificato, dimostrando così di avere conoscenza di entrambe le chiavi.

Un server che revoca un certificato dovrebbe contrassegnarlo nel CRL come superseded . Non sono sicuro che sia gli RFC sia il software (Microsoft FIM o AD CS) supportino diversi motivi di revoca e in che modo questo possa confondere il software.

Rinnovo + Nome soggetto diverso

Se una chiave rinnovata può cambiare il nome del soggetto (ad esempio un cambio di nome di un utente tramite matrimonio) o SAN, allora sarà necessario un campo personalizzato nel certificato per collegare insieme il certificato precedente. Spero che questo tipo di campo sia standardizzato in un RFC da qualche parte .... ??

Se questo è supportato, allora metterei in dubbio la necessità di una PKI o CA poiché una soluzione più semplice potrebbe essere basata unicamente su thumbprints (SSH)

Furto

Questo diventa un po 'peloso se la chiave precedente viene revocata, dove un ladro potrebbe sostituire il vecchio certificato con uno nuovo. Oltre alla logica di revoca, è necessaria la logica per risolvere un'interruzione di un server di revoca e forse una nuova finestra chiave che gestirà la situazione in cui un ladro ruba una chiave, cambia la chiave di autenticazione primaria e l'utente deve comunicare con la vecchia chiave "non rinnovata".

Microsoft ha rinnovo basato su chiave , in cui un ladro potrebbe rinnovare e blocca l'utente, quindi non essere nell'assunzione che un certificato rinnovato abbia sempre più garanzie rispetto all'identità che stai utilizzando attualmente.

    
risposta data 05.03.2015 - 04:59
fonte
1

Configura la tua CA. Inserisci questo codice CA nella tua app. Controlla se il certificato è emesso da questa CA. Elimina la verifica dell'impronta digitale. I rinnovi non sono un problema in questo scenario.

Oppure: in alternativa: fare in modo che il vecchio certificato / chiave firmi il nuovo certificato / chiave per i rinnovi. Invia questa firma quando è necessario rinnovare.

    
risposta data 04.01.2015 - 03:10
fonte
0

Non credo che questo sia sicuro, temo. Senza ulteriori interazioni con l'utente, come sapresti se il nuovo certificato è valido e amp; che non era un attacco man-in-the-middle?

Se continui ad accettare certificati aggiornati senza controllo manuale, nel tempo avrai sempre meno sicurezza.

A proposito, se si desidera una vera sicurezza, è necessario un controllo aggiuntivo che deve essere fatto abbastanza spesso e che è quello di controllare l'elenco di revoca dei certificati per l'autorità di autorizzazione. La frequenza con cui controlli la revoca dipende dal tipo di applicazione e dalla sicurezza che ti occorre.

Controlla la RFC ( RFC5280 ) per i dettagli.

    
risposta data 03.01.2015 - 00:55
fonte

Leggi altre domande sui tag