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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Максим Коллегин  
#11 Оставлено : 26 сентября 2012 г. 19:54:41(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Нет, причина в другом.
Знания в базе знаний, поддержка в техподдержке
Offline Андрей Писарев  
#12 Оставлено : 26 сентября 2012 г. 19:55:05(UTC)
Андрей *

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

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

Сказал «Спасибо»: 501 раз
Поблагодарили: 2058 раз в 1598 постах
dima_vor написал:
Вылетает ошибка при подписании документа. - Набор ключей не определен ( # -2146893799 )
Возможно ли что причина этого, что триальная версия КРИПТО ПРО SCP так же как и КРИПТО АРМ - с российскими ГОСТ криптоалгоритмами возможна только для платных версий программы?


нет

Техническую поддержку оказываем тут
Наша база знаний
Offline dima_vor  
#13 Оставлено : 27 сентября 2012 г. 11:05:24(UTC)
dima_vor

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

Группы: Участники
Зарегистрирован: 08.08.2012(UTC)
Сообщений: 70
Откуда: Казань

Сказал(а) «Спасибо»: 6 раз
maxdm написал:
Нет, причина в другом.


Вероятно, какие могут быть причины? Подскажите?
Offline Максим Коллегин  
#14 Оставлено : 27 сентября 2012 г. 13:12:28(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Код в студию.
Знания в базе знаний, поддержка в техподдержке
Offline dima_vor  
#15 Оставлено : 27 сентября 2012 г. 13:52:29(UTC)
dima_vor

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

Группы: Участники
Зарегистрирован: 08.08.2012(UTC)
Сообщений: 70
Откуда: Казань

Сказал(а) «Спасибо»: 6 раз
class Program
{
static void Main(string[] args)
{
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
X509Certificate2Collection fcollection = (X509Certificate2Collection)store.Certificates;
X509Certificate2Collection collection = X509Certificate2UI.SelectFromCollection(fcollection, "Select an X509 Certificate", "Choose a certificate to examine.", X509SelectionFlag.SingleSelection);
X509Certificate2 MyCertificate=null;
if (collection[0] != null)
{
MyCertificate = collection[0];
CRYPT_KEY_PROV_INFO Info = GetCertificateContextProperty(MyCertificate);
string s = Info.pwszContainerName.ToString();
CMS.Sign(Info.pwszContainerName, "password", "123.txt", "123.txt.bin");// падает внутри этого метода
}

Console.ReadKey();

}


[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CRYPT_KEY_PROV_INFO
{
[MarshalAs(UnmanagedType.LPWStr)]
public string pwszContainerName;
[MarshalAs(UnmanagedType.LPWStr)]
public string pwszProvName;
public uint dwProvType;
public uint dwFlags;
public uint cProvParam;
public IntPtr rgProvParam;
public uint dwKeySpec;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CRYPTOAPI_BLOB
{
public uint cbData;
public IntPtr pbData;
}



[DllImport("crypt32.dll")]
public static extern bool CertGetCertificateContextProperty(IntPtr pCertContext,
uint dwPropId, IntPtr pvData, ref uint pcbData);

public static CRYPT_KEY_PROV_INFO GetCertificateContextProperty(X509Certificate2 certificate)
{
try
{
IntPtr certhandle = certificate.Handle;
uint pcbData = 0;
if (CertGetCertificateContextProperty(certhandle, 2, IntPtr.Zero, ref pcbData))
{
IntPtr memoryChunk = Marshal.AllocHGlobal((int)pcbData);
try
{
if (CertGetCertificateContextProperty(certhandle, 2, memoryChunk,
ref pcbData))
{
CRYPT_KEY_PROV_INFO context =
(CRYPT_KEY_PROV_INFO)Marshal.PtrToStructure(memoryChunk,
typeof(CRYPT_KEY_PROV_INFO));
return context;
}
else
{
throw new Exception("сбой :( !");
}
}
finally
{
Marshal.FreeHGlobal(memoryChunk);
}
}
}
finally
{
//
}
throw new Exception("Ошибка Context Property");
}
}


В метод CMS.Sign(Info.pwszContainerName, "password", "123.txt", "123.txt.bin");
передаётся такой контейнер Info.pwszContainerName = "REGISTRY\\ContainerName".
В этом методе вызывается такая функция.
public static SafeCSPHandle GetCSPHandle(string containerPath, string password)
{
// Variables-переменные
SafeCSPHandle hProv = SafeCSPHandle.Null;
bool bResult = false;

// Get CSP handle
bResult = CryptAcquireContext(
out hProv,
containerPath,
Win32.VPN_DEF_PROV,
Win32.VPN_PROV_TYPE,
Win32.CRYPT_SILENT
);
if (!bResult)
{
throw new Exception("CryptAcquireContext error #" + Marshal.GetLastWin32Error().ToString(), new Win32Exception(Marshal.GetLastWin32Error()));
}

ASCIIEncoding enc = new ASCIIEncoding();
bResult = CryptSetProvParam(hProv, PP_SIGNATURE_PIN, enc.GetBytes(password), 0);
if (!bResult)
throw new Exception("CryptSetProvParam error #" + Marshal.GetLastWin32Error().ToString(), new Win32Exception(Marshal.GetLastWin32Error()));

// Return handle
return hProv;
}

Вероятно, что нужно передавать в эту функцию
CryptAcquireContext(
out hProv,
containerPath,
Win32.VPN_DEF_PROV,
Win32.VPN_PROV_TYPE,
Win32.CRYPT_SILENT
);
друге параметры, так как контейнер содержится в реестре. Прав?
PS - на самом деле моя программа выдает ошибку так - CryptAcquireContext error # -2146893799. Но я в нете накопал, что это ошибка : набор ключей не определён.
Offline Максим Коллегин  
#16 Оставлено : 27 сентября 2012 г. 15:11:58(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Откуда это скопипасчено?
Win32.VPN_DEF_PROV,
Win32.VPN_PROV_TYPE - берите эти константы тоже из ссылки на ключ.
Знания в базе знаний, поддержка в техподдержке
Offline dima_vor  
#17 Оставлено : 27 сентября 2012 г. 16:24:30(UTC)
dima_vor

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

Группы: Участники
Зарегистрирован: 08.08.2012(UTC)
Сообщений: 70
Откуда: Казань

Сказал(а) «Спасибо»: 6 раз
maxdm написал:
Откуда это скопипасчено?
от предка программиста.)


maxdm написал:

Win32.VPN_DEF_PROV,
Win32.VPN_PROV_TYPE - берите эти константы тоже из ссылки на ключ.

то есть Win32.VPN_DEF_PROV - CRYPT_KEY_PROV_INFO.pwszProvName,
Win32.VPN_PROV_TYPE - CRYPT_KEY_PROV_INFO.dwProvType
Offline Максим Коллегин  
#18 Оставлено : 27 сентября 2012 г. 16:59:25(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Ага.
Знания в базе знаний, поддержка в техподдержке
Offline dima_vor  
#19 Оставлено : 27 сентября 2012 г. 17:48:42(UTC)
dima_vor

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

Группы: Участники
Зарегистрирован: 08.08.2012(UTC)
Сообщений: 70
Откуда: Казань

Сказал(а) «Спасибо»: 6 раз
Большущее Спасибо!!!! Пока все в порядке!!!! Все в полном порядке!!!! УРА!!!!

PS кстати что за Points - у каждого пользователя?

Отредактировано пользователем 27 сентября 2012 г. 17:58:10(UTC)  | Причина: Не указана

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