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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline sailor  
#1 Оставлено : 30 июня 2014 г. 13:27:38(UTC)
sailor

Статус: Новичок

Группы: Участники
Зарегистрирован: 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, устанавливал туда Крипто Про, пункт меню в оснастке сертификатов появлялся, но при вызове его получал сообщение об ошибке (пустое) и ничего не происходило.
Offline Максим Коллегин  
#2 Оставлено : 30 июня 2014 г. 14:03:34(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 38 раз
Поблагодарили: 736 раз в 633 постах
Значит давали не те права, не тому пользователи или не на ту ветку - посмотрите procmonом - это будет проще всего.
Знания в базе знаний, поддержка в центре поддержки
Offline sailor  
#3 Оставлено : 30 июня 2014 г. 15:14:27(UTC)
sailor

Статус: Новичок

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

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