Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline losko  
#1 Оставлено : 31 июля 2012 г. 12:15:06(UTC)
losko

Статус: Участник

Группы: Участники
Зарегистрирован: 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();
}





}
}
Offline khomenko  
#2 Оставлено : 31 июля 2012 г. 13:42:11(UTC)
Михаил Хоменко

Статус: Активный участник

Группы: Администраторы, Участники
Зарегистрирован: 28.04.2010(UTC)
Сообщений: 140
Мужчина
Откуда: Крипто-Про

Поблагодарили: 15 раз в 14 постах
Добрый день,

Можете попробовать ф-ию CertGetCertificateContextProperty(... CRYPT_KEY_PROV_INFO ...)
Offline losko  
#3 Оставлено : 31 июля 2012 г. 14:32:03(UTC)
losko

Статус: Участник

Группы: Участники
Зарегистрирован: 31.07.2012(UTC)
Сообщений: 13

khomenko написал:
Добрый день,

Можете попробовать ф-ию CertGetCertificateContextProperty(... CRYPT_KEY_PROV_INFO ...)

Единственное непонятно как ее применить. Помогите пожалуйста разобраться, очень нужно
Offline khomenko  
#4 Оставлено : 31 июля 2012 г. 14:57:43(UTC)
Михаил Хоменко

Статус: Активный участник

Группы: Администраторы, Участники
Зарегистрирован: 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
    );
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.