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

Уведомление

Icon
Error

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

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

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

Уважаемые знатоки криптографии в Net, что в моем коде на C# не так, может что нужно дописать. Дело в том, что мне надо вывести в консоль ссылку на хранилище контейнера с ключами, например в таком виде:

REGISTRY\\ИМЯ КОНТЕЙНЕРА С КЛЮЧАМИ.
Как получить это имя контейнера и то, какое хранилище используется для этого контейнера. Ничего не получается. При попытке реализации функции CertGetCertificateContextProperty через P/Invoke все равно эта ссылка на хранилище контейнера не отображается в окне консоли

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;
using System.Runtime.InteropServices;

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();


}
[DllImport("crypt32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool CertGetCertificateContextProperty(
IntPtr pCertContext,
uint dwPropId,
IntPtr pvData,
ref uint pcbData);
Offline Максим Коллегин  
#2 Оставлено : 1 августа 2012 г. 15:01:55(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,405
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 720 раз в 624 постах
я не вижу вызова p/invoke.
Знания в базе знаний, поддержка в центре поддержки
Offline losko  
#3 Оставлено : 1 августа 2012 г. 15:10:30(UTC)
losko

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

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

maxdm написал:
я не вижу вызова p/invoke.

а разве этого не достаточно? извините за нубство, я только учусь
Код:
using System.Runtime.InteropServices; 
Offline Андрей Писарев  
#4 Оставлено : 1 августа 2012 г. 15:12:58(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,752
Мужчина
Российская Федерация

Сказал «Спасибо»: 577 раз
Поблагодарили: 2307 раз в 1807 постах
losko написал:
maxdm написал:
я не вижу вызова p/invoke.

а разве этого не достаточно? извините за нубство, я только учусь
Код:
using System.Runtime.InteropServices; 


нужно написать вызов функции CertGetCertificateContextProperty
Техническую поддержку оказываем тут
Наша база знаний
Offline losko  
#5 Оставлено : 1 августа 2012 г. 15:30:30(UTC)
losko

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

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

Андрей * написал:
losko написал:
maxdm написал:
я не вижу вызова p/invoke.

а разве этого не достаточно? извините за нубство, я только учусь
Код:
using System.Runtime.InteropServices; 


нужно написать вызов функции CertGetCertificateContextProperty


Подскажите пожалуйста как правильно написать вызов функции CertGetCertificateContextProperty?
Offline Андрей Писарев  
#6 Оставлено : 1 августа 2012 г. 15:35:42(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,752
Мужчина
Российская Федерация

Сказал «Спасибо»: 577 раз
Поблагодарили: 2307 раз в 1807 постах
losko написал:
Андрей * написал:
losko написал:
maxdm написал:
я не вижу вызова p/invoke.

а разве этого не достаточно? извините за нубство, я только учусь
Код:
using System.Runtime.InteropServices; 


нужно написать вызов функции CertGetCertificateContextProperty


Подскажите пожалуйста как правильно написать вызов функции CertGetCertificateContextProperty?


http://support.microsoft.com/kb/320602/ru


pCryptKeyProvInfo pwszContainerName

Отредактировано пользователем 1 августа 2012 г. 15:38:07(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.