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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline avorobev  
#1 Оставлено : 3 августа 2012 г. 17:04:22(UTC)
avorobev

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

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

Добрый день!

Возникла следующая проблема. Есть WCF-сервис, который работает с сертификатами. Сертификаты установлены на e-Token. То есть сам сертификат в реестре в LocalComputer, а закрытый ключ на токене. Если я запускаю серис в Visual Studio локально, то все работает нормально. Но если я публикую сервис в IIS, то нет доступа к закрытому ключу на токене. Сервис работает в IIS в пуле под моим пользователем. Ошибка происходит в методе, написанном по вашему примеру программной установки пароля для закрытого ключа.

Код:

        public X509Certificate2 SetPasswordToCertificate(X509Certificate2 baseCertificate, string password)
        {
            X509Certificate2 passwordCertificate = baseCertificate;

            Gost3410CryptoServiceProvider keyProvider = (Gost3410CryptoServiceProvider)baseCertificate.PrivateKey;
            if (keyProvider != null)
            {
                CspKeyContainerInfo containerInfo = keyProvider.CspKeyContainerInfo;

                // копируем параметры csp из исходного контекста сертификата
                CspParameters cspParameters = new CspParameters();
                cspParameters.KeyContainerName = containerInfo.KeyContainerName;
                cspParameters.KeyNumber = (int)containerInfo.KeyNumber;
                cspParameters.ProviderName = containerInfo.ProviderName;
                cspParameters.ProviderType = containerInfo.ProviderType;
                cspParameters.Flags = containerInfo.MachineKeyStore
                                  ? (CspProviderFlags.NoPrompt | CspProviderFlags.UseExistingKey | CspProviderFlags.UseMachineKeyStore)
                                  : (CspProviderFlags.NoPrompt | CspProviderFlags.UseExistingKey);

                // устанавливаем пароль или пин-код для контейнера закрытого ключа
                SecureString keyPassword = new SecureString();
                foreach (char passChar in password)
                {
                    keyPassword.AppendChar(passChar);
                }
                cspParameters.KeyPassword = keyPassword;

                // создаем новый контекст сертификата, поскольку исходный открыт readonly
                passwordCertificate = new X509Certificate2(baseCertificate.RawData);

                // задаем криптопровайдер с установленным паролем
                passwordCertificate.PrivateKey = new Gost3410CryptoServiceProvider(cspParameters);
            }

            return passwordCertificate;
        }


Так вот, на первой же строчке, при обращении к закрытому ключу
Код:
Gost3410CryptoServiceProvider keyProvider = (Gost3410CryptoServiceProvider)baseCertificate.PrivateKey;

воникает exception
Цитата:

System.Security.Cryptography.CryptographicException
Message=The Keyset parameter is invalid.
Source=CryptoPro.Sharpei.Base
StackTrace:
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.NetDetours.CPX509Certificate2.get_PrivateKey()


Кто-нибудь может подсказать, в чем проблема? Каких прав не хватает сервису, работающему под пользователем под IIS, в отличие от того же сервиса, работающего под тем же пользователем, но локально?

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

Offline khomenko  
#2 Оставлено : 3 августа 2012 г. 20:24:10(UTC)
Михаил Хоменко

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

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

Поблагодарили: 15 раз в 14 постах
день добрый,
в расширенных настройках пула значение свойства "загрузить профиль пользователя" == true ?
Offline avorobev  
#3 Оставлено : 3 августа 2012 г. 20:35:01(UTC)
avorobev

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

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

khomenko написал:
день добрый,
в расширенных настройках пула значение свойства "загрузить профиль пользователя" == true ?

да
Offline Ivanov-aa  
#4 Оставлено : 3 августа 2012 г. 21:05:11(UTC)
Ivanov-aa

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

Группы: Участники
Зарегистрирован: 01.08.2011(UTC)
Сообщений: 674
Откуда: Москва

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 38 раз в 36 постах
При публикации сертификата в IIS, когда на закрытом ключе присутствует пароль, необходимо "включить кэширование"(КриптоПро CSP - Безопасность).
Протестировать контейнер, и "запомнить пароль" для него. После чего должна запустится.
Offline avorobev  
#5 Оставлено : 3 августа 2012 г. 22:01:29(UTC)
avorobev

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

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

Да, это помогло, спасибо. Но это обходной способ. Опять же, в некотором роде, безопасность нарушается.
А почему доступ к закрытому ключу из под IIS валится, хотя локально работает?

Отредактировано пользователем 4 августа 2012 г. 3:26:35(UTC)  | Причина: Не указана

Offline avorobev  
#6 Оставлено : 3 сентября 2012 г. 13:59:29(UTC)
avorobev

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

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

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