Ответ 1
Добавьте эту строку кода ко второй строке и посмотрите, как она работает:
store.Open(OpenFlags.ReadOnly);
а затем внизу:):
store.Close();
Я использую следующий код для извлечения всех сертификатов на моем компьютере с помощью asp.net webapp. Коллекция сертификатов пуста, и я не понимаю, почему.
Я попытался выдавать себя за собственную учетную запись пользователя, и мне тоже не удалось. Что я делаю неправильно?
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 :(
Добавьте эту строку кода ко второй строке и посмотрите, как она работает:
store.Open(OpenFlags.ReadOnly);
а затем внизу:):
store.Close();
Все в одном...
У меня есть сервер apache (xamp) с https. Я получаю доступ через https и С# (vs2010) на страницу загрузки PHP
Установите сертификат из i.e в сертификат личной папки, например.
Чтобы просмотреть сертификаты, запустите "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();
Я могу найти сертификаты...
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 будет иметь сертификаты, которые меня волнуют... если это всего лишь один, я получаю первый элемент в коллекции.
Посмотрите в своем хранилище сертификатов (mmc/add/certificate snap-in/my user account/Certificates - Current User/Personal/Certificates), чтобы увидеть имя темы, чтобы убедиться, что "CN = mypc.domainname" - это то, что на самом деле сертификат.
"CN=mypc.domainname"
против
"CN = mypc.domainname"
... и т.д.