Статус: Новичок
Группы: Участники
Зарегистрирован: 26.06.2014(UTC) Сообщений: 2 
|
Что в наличии: 1. Крипто про 3.6.7777 R4 2. Windows XP SP3 3. CryptoPro .NET Client/SDK 4. ASP.NET веб-сервис 5. Тестовая лицензия на Крипто Про 6. IIS 5.1 Задача сервиса, принимать подписанные XML, проверять их подпись, делать дела. Также в функциях есть подпись XML. Вот с этим есть проблемы. Сертификат находиться в реестре, нахожу его по серийному номеру без проблем, но доступ к закрытому ключу приводит к исключению: Код:
System.Security.Cryptography.CryptographicException: Набор ключей не существует
at CryptoPro.Sharpei.CPUtils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
at CryptoPro.Sharpei.CPUtils.GetKeyPairHelper(CPCspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandleCP& safeProvHandle, SafeKeyHandleCP& safeKeyHandle)
at CryptoPro.Sharpei.Gost3410CryptoServiceProvider.GetKeyPair()
at CryptoPro.Sharpei.Gost3410CryptoServiceProvider..ctor(CspParameters parameters)
at CryptoPro.Sharpei.NetDetours.CPX509Certificate2.get_PrivateKey()
Путем недолгих поисков выяснилось, что необходимо задать права на закрытый ключ. Несколько раз читал про пункт меню в остнастке сертификатов, который позволяет раздавать права на закрытый ключ начиная с 3.6 R3, но такового у меня нет. Пропробовал завадать права доступа на ветки реестра Крипто Про, где храняться записи ключей, но и это не помогло. Дал пользователю ASPNET, из под которого работает серсив на IIS, админские права, но и это не помогло. Утилиты типа winhttpcertcfg также не дают результата, заканчивают выполнение с ошибкой. Что можно попробовать сделать еще? ПС. есть 2 виртуалки, Win7 и Windows Server 2012, устанавливал туда Крипто Про, пункт меню в оснастке сертификатов появлялся, но при вызове его получал сообщение об ошибке (пустое) и ничего не происходило.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,432  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 736 раз в 633 постах
|
Значит давали не те права, не тому пользователи или не на ту ветку - посмотрите procmonом - это будет проще всего. |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 26.06.2014(UTC) Сообщений: 2 
|
Посмотрел. Сделал следующее: Скопировал все содержимое ветки реестра из Код:
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users\S-1-5-21-4040385579-3022084203-545666633-1173
которая относиться к моей учетке в ветку реестра Код:
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Keys
Дал права на нее пользователя ASPNET. Следующий код, который работает для настольных приложений так и не работает: Код:
var sourcePrivateKey = source.PrivateKey as Gost3410CryptoServiceProvider;
if (sourcePrivateKey.IsNotEmpty())
{
var cspParameters = sourcePrivateKey.ToCspParameters(password);
return new X509Certificate2(source.RawData)
{
PrivateKey = new Gost3410CryptoServiceProvider(cspParameters)
};
}
Но вот этот сработал: Код:
var cspParameters = new CspParameters
{
KeyContainerName = source.GetCertificateContainerName(),
ProviderType = 75,
ProviderName = "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider",
Flags = CspProviderFlags.UseExistingKey | CspProviderFlags.UseMachineKeyStore,
KeyPassword = password.ToSecureString()
};
var sourcePrivateKey = new Gost3410CryptoServiceProvider(cspParameters);
if (sourcePrivateKey.IsNotEmpty())
{
return new X509Certificate2(source.RawData)
{
PrivateKey = sourcePrivateKey
};
}
Какие ключи храняться в ветке Код:
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Keys
? Не следал ли чего страшного? :)
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close