web-dev-qa-db-fra.com

Comment récupérer tous les certificats dans votre X509Store

J'utilise le code suivant pour récupérer tous les certificats de mon PC à partir d'une webapp asp.net. La collection de certificats est vide et je ne comprends pas pourquoi.

J'ai essayé d'usurper l'identité de mon propre compte d'utilisateur et j'ai échoué. Qu'est-ce que je fais mal?

var store = new X509Store(StoreLocation.CurrentUser); //StoreLocation.LocalMachine fails too
var certificates = store.Certificates;
foreach (var certificate in certificates)
{
    var friendlyName = certificate.FriendlyName;
    Console.WriteLine(friendlyName);
}

//original problem: fetch a single certificate by its subject name
X509Certificate2 clientCertificate = CertificateUtility.GetCertificate(StoreName.My, StoreLocation.CurrentUser,  "CN=mypc.domainname"); //returns null :(
41
Pablo

Ajoutez cette ligne de code à la deuxième ligne et voyez comment cela fonctionne:

store.Open(OpenFlags.ReadOnly);

et puis en bas :):

store.Close();
56
Chris B. Behrens

Tout en un ...

J'ai un serveur Apache (xamp) avec https. J'accède via https et c # (vs2010) à une page de téléchargement PHP

  1. Installez le certificat de i.e dans le certificat de dossier personnel, par exemple.

  2. Pour afficher les certificats exécutez "certmgr.msc", au moins dans win7

Liste des certificats personnels

var store = new X509Store(StoreLocation.CurrentUser); 

store.Open(OpenFlags.ReadOnly); 

var certificates = store.Certificates;
foreach (var certificate in certificates)
{
    var friendlyName = certificate.FriendlyName;
    var xname = certificate.GetName(); //obsolete
    Console.WriteLine(friendlyName);
}

store.Close();

Trouver un certificat spécifique

string certificateName = "CN=localhost"; //name found in the var xname
X509Store storex = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                    storex.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certificatesx =
            storex.Certificates.Find(X509FindType.FindBySubjectName, 
            certificateName,
            true);

X509Certificate certificatex = certificates[0];

storex.Close();
18
cealex

Je peux trouver des certificats par ...

var certificateStore = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine);

certificateStore.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

var certificateCollection = certificateStore.Certificates.Find(X509FindType.FindBySubjectName, "mycert.me.com",false);

certificateStore.Close();

var certificate = certificateCollection[0];

certificateCollection aura les certificats dont je me soucie ... si ce n'est qu'un, alors j'obtiens le premier élément de la collection.

3
Nabheet

Regardez dans votre magasin de certificats (mmc/add/snap-in de certificat/mon compte d'utilisateur/Certificats - Utilisateur actuel/Personnel/Certificats) pour voir le nom du sujet pour vous assurer que "CN = mypc.domainname" est bien ce qui est réellement sur le certificat.

"CN=mypc.domainname"

contre

"CN = mypc.domainname"

...etc

1
rick schott