2015-12-09 21 views
6

Utilizzo C# .NET e devo installare un gruppo di certificati nell'archivio certificati di Windows.Come posso verificare se un certificato è autofirmato?

Ho bisogno di controllare quali di questi certificati sono certificati di root (cioè autofirmati), quindi posso installarli nell'archivio "Certificati di root attendibili".

Sto utilizzando la classe standard X509Certificate2. La mia idea attuale è di verificare se lo Issuer e lo Subject sono gli stessi.

ho notato che X509Certificate2 ha Issuer-IssuerName e Subject - SubjectName.

È meglio confrontare Issuer a Subject o IssuerName a SubjectName? O non importa davvero?

Inoltre, questo è un metodo affidabile o sarebbe meglio utilizzare un altro approccio?

risposta

8

Vedi questo post: java - Find if a certificate is self signed or CA signed

Anche se non è C#, il commento dalla soluzione nota

Se il soggetto ed emittente sono gli stessi, è auto-firmato

significa che hai ragione sul modo in cui stai provando a convalidarlo.

IssuerName e SubjectName cambio una DistinguishedName contenente RawData (a byte[] contenente le informazioni prima per l'emittente/soggetto). Faresti meglio a confrontare questo campo, anche se I credo confronto Subject e Issuer è altrettanto valido.

Quindi, si potrebbe scrivere qualcosa di simile:

public static bool IsSelfSigned(X509Certificate2 cert) 
{ 
    return cert.SubjectName.RawData.SequenceEqual(cert.IssuerName.RawData); 
} 
Problemi correlati