Una chiave pubblica rimane la stessa quando viene rinnovato un certificato? [duplicare]

1

Quindi sto implementando il blocco dei certificati su iOS e si consiglia di controllare la catena di certificati utilizzando i valori hash della chiave pubblica.

La logica di questo risiede nel fatto che ci è stato detto che il rinnovo del certificato del server manteneva la stessa chiave pubblica. In quanto tale, il certificato sul server potrebbe essere rinnovato alla scadenza e tale rinnovo non avrebbe alcun impatto sull'app.

IOW, non avrei bisogno di aggiornare l'app con un nuovo certificato.

Nota che i certificati in questione sono firmati da una CA pubblica (Digicert).

Attualmente aggiriamo il problema inserendo il certificato intermedio che ha firmato il certificato foglia (durata maggiore). Altrettanto ovvio, è un po 'meno sicuro che attaccare alla foglia.

Tuttavia, ho riscontrato alcuni commenti che implicano che il rinnovo di un certificato foglia crea una nuova chiave pubblica. Soprattutto se tale rinnovo viene effettuato generando una nuova CSR.

Quindi qual è?

O per riformulare la domanda:

Quando ho installato i certificati su un server, in genere l'ho fatto creando un CSR di rinnovo e assegnandolo alla CA. Quando la CA mi fornisce un nuovo certificato (rinnovato) e lo installo, avrà la stessa chiave pubblica del vecchio certificato?

Se la risposta è sempre: sì, allora sto bene. Se la risposta è no, allora ho bisogno di fare qualcos'altro.

E se la risposta è un "forse" definitivo, allora sono praticamente sulla stessa barca di un no.

    
posta Michael Long 25.09.2018 - 18:37
fonte

2 risposte

3

I've typically done so by creating a renewal CSR and giving it to the CA. When the CA gives me a new (renewed) certificate and I install it, will it have the same public key as the old certificate?

La CA copia la chiave pubblica dal CSR al certificato. Quando crei il CSR, dipende da te la chiave che hai inserito. Puoi scegliere di usare la stessa chiave dell'ultima volta, puoi scegliere di usare una chiave appena generata, puoi scegliere di usare una chiave appena estratta dalla tua cella frigorifera, tutto dipende da te.

Currently we get around the issue by pinning to the intermediate certificate that signed the leaf certificate (longer shelf life).

Questa è una cattiva idea. Non c'è garanzia che i futuri certificati saranno rilasciati dallo stesso certificato intermedio.

So I'm implementing certificate pinning

Consiglio vivamente quanto segue.

  1. Inserisci solo la chiave dell'entità finale, non provare a bloccare l'intera catena. Non hai idea se i certificati futuri saranno emessi dalle stesse chiavi root e intermedie.
  2. Assicurati di avere le chiavi di riserva che verranno riconosciute dal tuo cliente, in quanto la tua applicazione riconosce solo una singola chiave che ti lascia in piedi in un covo di merda senza una pagaia se quella chiave viene compromessa. Le chiavi di riserva devono essere conservate in celle frigorifere e, idealmente, dovrebbero includere una selezione di tipi / punti di forza nel caso in cui sia necessario passare a chiavi più potenti in futuro.
risposta data 25.09.2018 - 19:47
fonte
0

A VOLTE È riutilizzato un tasto. Se non hai motivo di credere che la vecchia chiave sia compromessa, questa potrebbe essere una buona idea.

Ma se una chiave è compromessa (ad esempio qualcuno ha rubato la tua chiave privata), allora devi essere in grado di generare una nuova chiave. Quindi la tua applicazione deve essere in grado di gestire riutilizzare una vecchia chiave OPPURE generare una nuova chiave.

Devi assolutamente verificare la catena di certificati. Questo fa parte dell'apertura di una connessione TLS affidabile. Più precisamente, dovresti configurare qualsiasi libreria standard che stai usando, come OpenSSL, per farlo per te.

E per il blocco dei certificati dovresti controllare il certificato foglia. Presumo che una biblioteca possa farlo anche per te, ma non ne ho esperienza.

    
risposta data 25.09.2018 - 20:33
fonte

Leggi altre domande sui tag