Как получить все сертификаты в вашем магазине X509Store - PullRequest
40 голосов
/ 19 января 2011

Я использую следующий код для получения всех сертификатов на моем компьютере из веб-приложения asp.net.Коллекция сертификатов пуста, и я не могу понять, почему.

Я пытался выдать себя за свою учетную запись, но у меня тоже не получилосьЧто я делаю не так?

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 :(

Ответы [ 4 ]

55 голосов
/ 19 января 2011

Добавьте эту строку кода во вторую строку и посмотрите, как она работает:

store.Open(OpenFlags.ReadOnly);

, а затем это внизу:):

store.Close();
18 голосов
/ 09 сентября 2011

Все в одном ...

У меня есть сервер Apache (xamp) с https. Я получаю доступ через https и c # (vs2010) на страницу загрузки PHP

  1. Установите сертификат из i.e, например, в сертификат личной папки.

  2. Для просмотра сертификатов запустите "certmgr.msc", по крайней мере, в 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();
3 голосов
/ 17 августа 2011

Я могу найти сертификаты по ...

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 будет иметь сертификаты, о которых я забочусь ... если это один из них, я получу первый элемент в коллекции.

1 голос
/ 19 января 2011

Посмотрите в вашем хранилище сертификатов (mmc / add / оснастка сертификата / моя учетная запись пользователя / Сертификаты - текущий пользователь / Личные / Сертификаты), чтобы увидеть имя субъекта, чтобы убедиться, что "CN = mypc.domainname" - это то, что на самом деле включено сертификат.

"CN=mypc.domainname"

против

"CN = mypc.domainname"

... и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...