Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 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)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Администраторы, Участники Зарегистрирован: 28.04.2010(UTC) Сообщений: 140  Откуда: Крипто-Про Поблагодарили: 15 раз в 14 постах
  
	 
	
     | 
    
        
            
		      
                день добрый, в расширенных настройках пула значение свойства "загрузить профиль пользователя" == true ? 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
  
	 
	
     | 
    
        
            
		      
                khomenko написал:день добрый, в расширенных настройках пула значение свойства "загрузить профиль пользователя" == true ?  да  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 01.08.2011(UTC) Сообщений: 674 Откуда: Москва
  Сказал(а) «Спасибо»: 9 раз Поблагодарили: 38 раз в 36 постах
  
	 
	
     | 
    
        
            
		      
                При публикации сертификата в IIS, когда на закрытом ключе присутствует пароль, необходимо "включить кэширование"(КриптоПро CSP - Безопасность). Протестировать контейнер, и "запомнить пароль" для него. После чего должна запустится. 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
  
	 
	
     | 
    
        
            
		      
                Да, это помогло, спасибо. Но это обходной способ. Опять же, в некотором роде, безопасность нарушается.  А почему доступ к закрытому ключу из под IIS валится, хотя локально работает? Отредактировано пользователем 4 августа 2012 г. 3:26:35(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 13.04.2012(UTC) Сообщений: 109
  
	 
	
     | 
    
        
            
		      
                Благодаря помощи техподдержки Аладдина удалось решить этот вопрос. Решение оказалось в том, что Application Pool для web-приложения должен быть запущен от имени LocalSystem. 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close