Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 13
|
Приветствую уважаемые форумчане, просьба помочь новичку в освоении криптографии в Net. Пишу прогу на C#, которая выводила бы в консоль ссылку на хранилище контейнера с сертификатом. Есть некий контейнер с ключами, среди которых также имеется файл с сертификатом. Этот сертификат установлен в хранилище личные (MY), и имеет привязку, например к флешке или реестру системы. Так вот, можно ли как-то программно вывести в консоль путь (ссылку) к флешке или реестру, где лежит контейнер с ключами. На данный момент получается только вывод в консоль информации по сертификату: серийный номер, отпечаток, действителен по, и т.д. Подскажите пожалуйста, какой метод или может быть какую функцию надо использовать, чтобы вывести эту самую ссылку на хранилище контейнера с сертификатом. К примеру, чтобы в консоли отображалось примерно следующее:
Хранилище контейнера: REGISTRY \\ Имя контейнера с ключами
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Permissions; using System.IO; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates;
namespace ConsoleApplication1 { class Crypto {
private static void Main(string[] args) {
var keyStore = new X509Store("MY", StoreLocation.CurrentUser);
keyStore.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
var cert = keyStore.Certificates.Count;
{ Console.WriteLine("В хранилище текущего пользователя сертификатов: {0}", cert);
}
int kol = 0;
List<X509Certificate> list = new List<X509Certificate>();
foreach (var c in keyStore.Certificates) { kol += c.HasPrivateKey ? 1 : 0; // если свойство HasPrivateKey равно true, то к kol прибавляется единица, иначе прибавляется нуль
if (c.HasPrivateKey) { list.Add(c);
} } Console.WriteLine("Количество сертификатов с закрытым ключом: {0}", kol.ToString());
foreach (var item in list) { Console.WriteLine(item.ToString()); }
Console.ReadKey(); }
} }
|
|
|
|
Статус: Активный участник
Группы: Администраторы, Участники Зарегистрирован: 28.04.2010(UTC) Сообщений: 140  Откуда: Крипто-Про Поблагодарили: 15 раз в 14 постах
|
Добрый день,
Можете попробовать ф-ию CertGetCertificateContextProperty(... CRYPT_KEY_PROV_INFO ...)
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 31.07.2012(UTC) Сообщений: 13
|
khomenko написал:Добрый день,
Можете попробовать ф-ию CertGetCertificateContextProperty(... CRYPT_KEY_PROV_INFO ...) Единственное непонятно как ее применить. Помогите пожалуйста разобраться, очень нужно
|
|
|
|
Статус: Активный участник
Группы: Администраторы, Участники Зарегистрирован: 28.04.2010(UTC) Сообщений: 140  Откуда: Крипто-Про Поблагодарили: 15 раз в 14 постах
|
Вызвать CertGetCertificateContextProperty через PInvoke C параметрами: PCCERT_CONTEXT pCertContext == X509Certificate2.Handle DWORD dwPropId == CRYPT_KEY_PROV_INFO Код:
[DllImport("crypt32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool CertGetCertificateContextProperty(
IntPtr pCertContext,
uint dwPropId,
IntPtr pvData,
ref uint pcbData
);
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close