Valuta la firma di un certificato X509 in .NET

2

Questo è il mio scenario:

Una CA firma un certificato con la sua chiave privata e lo invia a un client tramite la risposta https. Da questa risposta il client crea una classe X509Certificate2, che rappresenta il certificato in .NET

X509Certificate2 myCert = new X509Certificate2(certBuffer);

Ho anche la chiave pubblica della CA per verificare la firma

RootCertificate.PublicKey.Key

Ora sto cercando un modo per verificare se la firma è valida. Come lo posso fare? La classe X509Certificate2 non sembra fornire un modo per accedere al campo della firma.

    
posta PogoMips 01.10.2013 - 15:30
fonte

1 risposta

4

La convalida del certificato X.509 è un processo complesso . Con .NET, si suppone di utilizzare la classe X509Chain per eseguire tale convalida, che comporta la costruzione del percorso, la verifica delle firme, lo stato di revoca e un gazillion di altre cose. Vedi questa risposta per un esempio.

X509Certificate2 ha anche un metodo Verify() , ma quello controlla il certificato rispetto alle impostazioni predefinite della macchina: l'archivio fidato dell'utente, le politiche dell'utente ... che possono o meno mappare bene al tuo caso specifico. Per avere il pieno controllo del processo, usa X509Chain .

(L'estrazione del valore della firma e l'esatta sequenza di byte firmata non sono eccessivamente complessi se si conosce un po 'di ASN.1 / DER, ma il punto è che c'è molto di più nella convalida dei certificati rispetto alle semplici firme. Fare le cose manualmente è un percorso che ho personalmente percorso diverse volte, e comporta molte sofferenze.Utilizzando l'implementazione già fornita da .NET risparmierai un sacco di tempo e l'implementazione è X509Chain .)

    
risposta data 01.10.2013 - 15:59
fonte

Leggi altre domande sui tag