Perché questo certificato X.509 è considerato non valido?
-
01-07-2019 - |
Domanda
Ho un determinato certificato installato sul mio server.Tale certificato ha date valide e sembra perfettamente valido nello snap-in MMC dei certificati di Windows.
Tuttavia, quando provo a leggere il certificato, per utilizzarlo in una HttpRequest, non riesco a trovarlo.Ecco il codice utilizzato:
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly); X509Certificate2Collection col =
store.Certificates.Find(X509FindType.FindBySerialNumber, "xxx", true);
xxx
è il numero di serie;l'argomento true
significa "solo certificati validi".La raccolta restituita è vuota.
La cosa strana è che se passo false
, che indica che i certificati non validi sono accettabili, la raccolta contiene un elemento: il certificato con il numero di serie specificato.
Insomma:il certificato sembra valido, ma il Find
il metodo lo considera non valido!Perché?
Soluzione
Prova a verificare la catena di certificati utilizzando il file X509Catena classe.Questo può dirti esattamente perché il certificato non è considerato valido.
Come suggerito da erickson, il tuo X509Store potrebbe non avere il certificato attendibile della CA nella catena.Se hai utilizzato OpenSSL o un altro strumento per generare la tua CA autofirmata, devi aggiungere il certificato pubblico per tale CA a X509Store.
Altri suggerimenti
Il certificato dell'emittente è presente nell'X509Store?Un certificato è valido solo se è firmato da qualcuno di cui ti fidi.
È un certificato di una vera CA o uno che hai firmato tu stesso?Gli strumenti di firma dei certificati spesso utilizzati dagli sviluppatori, come OpenSSL, non aggiungono alcune estensioni importanti per impostazione predefinita.
Credo che i certificati x509 siano legati a un particolare utente.Potrebbe non essere valido perché nel codice si accede come utente diverso da quello per cui è stato creato?