Posso usare pin chiave pubblica con LetsEncrypt?


10

Posso impostare Pin chiave pubblica quando installo un cronjob per rinnovare il certificato LetsEncrypt ogni 30 giorni?

Se il certificato viene rinnovato, anche il PIN chiave pubblica viene rinnovato, giusto?

Risposte:


12

Alcune parole di cautela per cominciare:

  • Scopri cosa stai facendo, se hai intenzione di implementare HPKP.
  • Se non lo fai nel modo giusto o "se accadono cose brutte", che non sono sotto il tuo controllo, potresti rendere inutilizzabile il tuo dominio.
  • Assicurati di testare la tua configurazione con un dominio che non è così importante o con un tempo di cache molto breve, ad esempio dieci secondi.
  • Pensa a quali certificati vuoi appuntare: radice, intermedio, foglia ...
  • Pensa se ha senso bloccare un'altra autorità di certificazione (backup), i certificati intermedi e il certificato foglia.
  • Meglio prevenire che curare: pensa se ha senso bloccare un altro CA / certificato di backup, per averne due.
  • Se questi punti e domande ti sembrano "nuovi": leggi di cosa tratta HPKP e le trappole e le avvertenze comuni, prima di implementarlo.

Posso usare pin chiave pubblica con LetsEncrypt?

  • Sì.

Se il certificato viene rinnovato, anche il PIN chiave pubblica viene rinnovato, giusto?

  • Questo dipende dal certificato a cui ti riferisci e da quali certificati stai bloccando.

9

Farebbe eco a tutto ciò che GF_ ha detto.

Tuttavia, per rispondere alla domanda, sì, è possibile.

Per impostazione predefinita Let's Encrypt ricrea la chiave e il certificato al rinnovo. Ciò rende difficile l'implementazione di HPKP se si desidera bloccare la foglia, cosa che probabilmente si dovrebbe fare in caso di modifiche intermedie ( come nel marzo 2016 ).

Quindi hai diverse opzioni a riguardo se vuoi ancora fare HPKP:

  1. Usa il tuo CSR fisso anziché il client standard che crea il CSR per te ogni volta in modo che la chiave foglia non cambi. Questo post sul blog spiega come farlo specificatamente perché l'autore utilizza HPKP.
  2. Usa brevi scadenze HPKP e rinnova entro tale termine e modifica la politica per avere le chiavi vecchie e nuove prima di modificare effettivamente il certificato, con il tempo sufficiente affinché i nuovi criteri vengano rilevati da tutti i visitatori.
  3. Pin la radice Let's Encrypt invece della foglia o del certificato.

1
Buone aggiunte, +1.
gf_

È sicuro bloccare la radice? Per un MITM è davvero facile usare il proprio certificato Let's Encrypt.
melbic il

2
Com'è "davvero facile" per un utente malintenzionato ottenere un certificato per il tuo nome di dominio utilizzando Let's Encrypt? Non sono a conoscenza di alcun modo per farlo. Tuttavia, potrebbe essere possibile con qualsiasi CA se hanno bug nelle procedure di convalida del dominio. Appuntando la radice di LE hai ridotto in modo massiccio la tua superficie di attacco a Let's Encrypt invece di ogni CA al mondo. Non sono ancora sicuro come appuntare la foglia, sono d'accordo, ma ciò introduce i suoi rischi, quindi dipende dalla tua definizione di "sicuro".
Barry Pollard il

Dire che penso che ci siano MASSIVI rischi per HPKP - principalmente dal punto di vista del suicidio - quindi non sono un fan. Se si decide di modificare la CA o le modifiche al percorso del certificato (ad es. A causa dell'ammortamento SHA-256) o se è necessario riemettere urgentemente il certificato o la chiave di backup viene compromessa / persa o la persona che l'ha impostata lascia e la prossima persona non si rende conto usano HPKP e / o non lo sanno. HPKP inoltre non protegge dalle radici locali come Superfish. Quindi, per la maggior parte dei siti, HPKP è troppo complesso e, IMHO, non vale la protezione aggiunta per il piccolo guadagno di sicurezza aggiunto. Ma questa è solo la mia opinione.
Barry Pollard il

Ok, l'ho chiesto solo perché pensavo che tutti i certificati LE abbiano lo stesso certificato radice. Quindi, se si blocca la radice qualcun altro con un altro certificato LE può semplicemente usare un MITM e fingere nel proprio certificato. Sai cosa intendo?
melbic il

5

Ho appena implementato questo usando il client disidratato con validazione dns01. L'hook dns01 è sicuro perché il nostro DNS è ospitato in Azure.

Modifica: quando parlo di chiavi private, ovviamente intendo sempre che trasformi solo le parti della chiave pubblica in pin. Le chiavi private, come suggerisce il nome, dovrebbero sempre rimanere private. Vedi il mio gancio per i dettagli di implementazione.


È necessario il rollover della chiave privata per renderlo possibile. Cioè, hai sempre la chiave privata corrente (chiamala A) e la chiave privata futura (chiamala B) a portata di mano, in modo da poterle aggiungere entrambe ai tuoi pin. Quindi a questo punto i pin sono A e B. Quando arriva il giorno del rinnovo della certificazione, la chiave privata A diventa obsoleta e B diventa attiva. Allo stesso tempo ottieni una nuova chiave privata futura, chiamala C. Rigenera la tua lista pin quindi ora contiene B e C. Quindi è così che arrotoli le tue chiavi private. disidratato supporta questo ora .

Inoltre, hai bisogno di un hook che viene chiamato ogni volta che rinnovi i certificati e quindi arrotoli le tue chiavi private. L'ho implementato da solo .

Infine, se ho capito bene, devi assicurarti che:

HPKP age x 2 < days between cert renewals

Ad esempio, se la tua età HPKP è di 50 giorni e rinnovi i certificati ogni 30 giorni, un cliente che ha visitato il tuo sito il primo giorno sarà bloccato con le chiavi private A e B e passerai a B e C al giorno 31. Il tuo il server ha B e C, il client ha A e B, c'è una corrispondenza anche il giorno 50 e il client apre correttamente il sito.

Ma vediamo se l'età di HPKP è di 70 giorni. Rinnovi i certificati ogni 30 giorni e il cliente ha visitato il tuo sito il primo giorno, quindi di nuovo ha solo le chiavi private A e B. Sei passato a B e C al giorno 31 e passato a C e D al giorno 61 Il tuo server ha C e D, il client ha A e B, non c'è corrispondenza e al client viene assegnato il dito medio dal giorno 61 al giorno 71, quando scade la sua politica HPKP.


Un'altra opzione, probabilmente più sicura e sicuramente molto più semplice, è quella di utilizzare sempre la stessa chiave privata e generare una o più chiavi private di backup, quindi codificarle nella configurazione HPKP e procedere con essa.


Sì, è difficile e potrebbero esserci avvertimenti a cui non ho pensato, ma vedremo a lungo termine. Ovviamente l'ho distribuito su un sottodominio non critico con una breve HPKP (15 giorni) in modo che non causasse grossi problemi.


Modifica: ho scritto alcuni script per aiutarti a configurare HPKP con Let's Encrypt e disidratato usando Nginx:

HPKPinx


3
Ho deciso di avere il meglio dei due mondi. Rollover automatizzato della chiave privata + una chiave privata statica. Potrebbe scrivere un post sul blog se qualcuno è interessato.
bviktor il

1
Se lo fai, modifica il tuo post e inserisci il link - grazie!
gf_

Grazie, farò del mio meglio per finirlo o la prossima settimana
bviktor

2
Link aggiunto. La documentazione è ancora scarsa, ma il codice è lì in modo che tu possa provarlo e hackerarlo.
bviktor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.