Come determinare se un certificato in un registro CT è il mio?

8

Sto sperimentando la scansione dei registri di trasparenza dei certificati per i miei domini e desidero filtrare le voci di registro per i certificati legittimamente emessi, così ricevo solo gli avvisi quando qualcuno altro riceve un certificato per il mio dominio.

Ho cercato di scoprire se una voce di registro CT era mia confrontando la sua impronta digitale con l'impronta digitale del certificato sul mio server. Tuttavia, ho trovato che alcune voci nel registro sono "pre-certificati", che hanno un'estensione critica extra per renderli non validi nei browser. Questi sono apparentemente considerati equivalenti al certificato finale rilasciato a fini di trasparenza (quindi sembra una cattiva idea ignorare tutti i pre-certificati), ma la loro impronta digitale non corrisponde alla chiave che ho.

Come posso determinare che tale pre-certificato sia equivalente a un certificato emesso?

    
posta Wolfgang 22.04.2018 - 03:16
fonte

2 risposte

1

Controlla la chiave pubblica, se corrispondono, va bene. Alla fine della giornata, la chiave è la parte importante del certificato, come se fosse la tua chiave e quindi l'attaccante non ha la chiave privata corrispondente, il resto non è importante.

Non controllare l'ID del certificato come suggerito, l'ID può essere manipolato.

    
risposta data 22.04.2018 - 14:41
fonte
1

Sì, il modo più semplice è confrontare la chiave pubblica in pre-certificato e certificato, come indicato sopra. Ma il modo potrebbe essere sbagliato se CA ha emesso un certificato con dati pre-certificati errati. Lasciatemi spiegare. Si supponga di avere una parte TBS (ToBeSigned) del possibile certificato futuro. Quindi CA rende pre-certificato dal TBS (aggiungere "estensione veleno" e firmare il pre-certificato con il tipo di chiave falsa) e inviarlo al registro CT. Quindi CA riceve SignedCertificateTimestamp (SCT) per il certificato e include SCT nel TBS iniziale come un'estensione. Quindi CA rilascia un certificato reale - firma il TBS con la vera chiave CA. Ma potrebbe esserci un problema: alcune CA potrebbero erroneamente emettere un certificato per utente finale rendendo il TBS finale diverso da quello pre-certificato! Ecco un vero esempio

Tutti i pre-certificati solitamente emessi per avere valore per l'estensione del certificato X.509 di SignedCertificateTimestampList (1.3.6.1.4.1.11129.2.4.2). Tuttavia, nell'estensione del certificato, si trova solo la parte TBS (ToBeSigned) del pre-certificato, non un pre-certificato completo. E per dimostrare che questo particolare pre-certificato è per questo particolare certificato, è necessario verificare il valore dell'estensione SignedCertificateTimestampList rispetto al tipo PreCert dedotto dal certificato. Sembra complicato, ma è così che funziona tutto. Per aiutare le persone a risolvere i problemi con la verifica dei dati interni CT, ho creato CTjs lib. Qui puoi trovare un esempio come verificare correttamente i dati pre-certificati rispetto al certificato per l'utente finale.

Sentiti libero di fare ulteriori domande sui dati CT.

    
risposta data 20.06.2018 - 13:44
fonte

Leggi altre domande sui tag