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 :(
Ajoutez cette ligne de code à la deuxième ligne et voyez comment cela fonctionne:
store.Open(OpenFlags.ReadOnly);
et puis en bas :):
store.Close();
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
Installez le certificat de i.e dans le certificat de dossier personnel, par exemple.
Pour afficher les certificats exécutez "certmgr.msc", au moins dans win7
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();
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();
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.
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