| 
	Статус: Активный участник
 Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
 Сообщений: 49
 Откуда: CHL
 
 | 
            
		      
                --csptest -cmslowsign -verify -in signedattr.bin
 CSP (Type:75) v3.6.5355 KC2 Release Ver:3.6.5402 OS:Windows CPU:IA32 FastCode:RE
 ADY,ENABLED.
 An error occurred in running the program.
 .\cmslow.c:807:No user cert specified. Cryptocontext will be opened automaticaly
 .
 Error number 0x0 (0).
 Операция успешно завершена.
 
 The message to decode is open.
 The encoded blob has been added to the message.
 The message parameter (CMSG_CONTENT_PARAM) has been acquired. Message size: 961
 The message param (CMSG_CONTENT_PARAM) updated. Length is 961.
 Try to get user cert. OK. Length 288.
 The signer info has been returned.
 The message certificate store be used for verifying
 A signer certificate has been retrieved.
 
 Signature was VERIFIED.
 Total: SYS: 0.016 sec USR: 0.000 sec UTC: 0.046 sec
 [ErrorCode: 0x00000000]
 
 
 Я так понимаю что работает?
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
 Сообщений: 49
 Откуда: CHL
 
 | 
            
		      
                Из хранилища сохранил сделал все как описали никаких сообщений о несоответсвии контейнеру не выдавалось.В коде по прежнему ошибка выдается - в коде примера. Возможно конечно я не тот сертификат передаю -
 но он у меня один, по трейсу я четко вижу что берется именно тот сертификат в коллекции сертификатовю
 когда пытаюсь в трейсе посмотреть свойства сертификата X509Certificate2 трайс четко запрашивает пароль
 к закрытому контейнеру и только после этого выдает информацию. Единственный момент при просмотре в трейсе
 свойств сертификата он уже выдает другую ошибку на эту строку - "Не удается построить цепочку сертификатов для
 доверенного корневого центра". Видимо какой то сбой после проверки сертификата в трайсе. если сертификат не
 пытаться посмотреть в трейсе - то ошибка по прежнему остается той же.
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПроПоблагодарили: 2 раз в 2 постах
 | 
            
		      
                Если коротко, то проблема в пароле на контейнер. Быстрое решение - удалить пароль с контейнера.Позже отпишу подробнее.
 | 
| С уважением, Александр. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
 Сообщений: 49
 Откуда: CHL
 
 | 
            
		      
                Да Александр тоже уже начал думать об этомсначало погонял из командной строки как вы и описали потом думаю почему в примере не спрашивает пароль на контейнер, ведь когда из командной строки запускаеш с указанием сертификата пароль запрашивается, скорее всего в этом проблема.
 
 Пароль не хотелось бы отменять. начал копать в направлении что при подписи передавать пароль для сертификата но такого параметра не нашлось
 
 signedCms.ComputeSignature(cmsSigner, False)
 
 в описании написано - что значение FALSE указывает на то что пользователь должен получить приглашение на выбор сертификата
 окно на запрос пароля стало выскакивать - но по прежнему присутствует ошибка  "Не удается построить цепочку сертификатов для доверенного корневого центра"
 
 
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
 Сообщений: 49
 Откуда: CHL
 
 | 
            
		      
                Как то мне на рутокене не удалось сделать без пароля - пишет минимум 1н символМожно поставить галочку запомнить пароль но он просто запоминает его ну и выходит в ошибочку про цепочку сертификатов
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
 Сообщений: 49
 Откуда: CHL
 
 | 
            
		      
                В общем ситуация такая я установил некий корней сертификат того сертификационного центра который выдавал нам рутокены в хранилище - Доверенные корневые центры сертификации
 У нас есть рабочее место организованное от Этого центра - просто посмотрел что там есть такой сертификат и там все работает.
 
 в конечном итоге пример заработал.
 
 Только мне не понятно зачем нужен такой корневой сертификат ?
 Можно ли избежать его присутсвия на Компьютере?
 (это не принципиально, просто для себя определить)
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПроПоблагодарили: 2 раз в 2 постах
 | 
            
		      
                Цитата:Только мне не понятно зачем нужен такой корневой сертификат ? У класса CmsSigner есть свойство IncludeOption , которое "устанавливает или возвращает параметр, который определяет, должны ли в создаваемое сообщение CMS/PKCS 7 включаться корневой сертификат и вся цепочка сертификатов, связанные с сертификатом для подписи." В примерах приведенных подписи CMS в КриптоПро Sharpei SDK это поле нигде явно не проставляется, поэтому используется значение по умолчанию ExcludeRoot . Таким образом при подписи делается попытки построения цепочки. Поскольку в Вашем случае корневой сертификат не находится, то выдается приведенное Вами исключение. Цитата:Можно ли избежать его присутсвия на Компьютере?  Да, можно, если установить для каждого подписавшего значение свойства IncludeOption  в None (Цепочка сертификатов не включается.) или EndCertOnly (Включается только конечный сертификат.), в этих случаях построение цепочки при подписи производится не будет. При проверке подписи Вам необходимо, кроме самой проверки, проверять корректность подписавшего - или Вы делаете это самостоятельно, или указывате signedCms.CheckSignature(false).  В случае EndCertOnly при подписи в сообщение будет включен только сертификат подписавшего, а при проверке корректности сертификата подписавшего промежуточные сертификаты необходимо уложить в соответствующие промежуточные store (или вручную уложить в сообщение), а корневой сертификат в root store. В случае None при подписи необходимо уложить еще и сертификат подписывающего. | 
| С уважением, Александр. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПроПоблагодарили: 2 раз в 2 постах
 | 
            
		      
                Теперь обещанный ответ по поводу паролей. Как подписывать CMS сообщение при помощи секретных ключей, которые имеют пароль. 1. При подписи сообщения использовать метод CmsSigner.ComputeSignature(CmsSigner signer,bool silent) со вторым параметром установленным в false. В этом случае при каждой подписи будет появляться окно КриптоПро для ввода пароля. 2. Убрать с контейнера пароль при помощи контрольной панели КриптоПро CSP. Этот метод, кроме очевидной меньшей защищенности, еще не работает для носителей с аппаратным PIN кодом (eToken, ruToken, Оскар...). 3. Открыть контейнер с секретным ключем заранее и не закрывать его пока не будут выполнены все необходимы операции подписи. Данный вариант удобен, если необходимо подписать несколько "документов" на одном ключе.  3 а) Есть сертификат certificate в MY со ссылкой на секретный ключ Код:Gost3410CryptoServiceProvider prov = (Gost3410CryptoServiceProvider)certificate.PrivateKey;
SecureString s = new SecureString();
// заполняем пароль... например так
s.AppendChar('1');
// и передаем его в провайдер.
prov.SetContainerPassword(s);
   если необходимо, то можно сразу и проверить пароль, например, так Код:byte[] dummyHash = new byte[32];
p.SignHash(dummyHash);
  если он не подпойдет, то будет выведено окно КриптоПро с просьбой ввести другой пароль.  и при необходимости используем этот сертификат со ссылкой на уже открытый и прогруженный ключ.   3 б) Есть сертификат (где-то) и есть секретный ключ (ему соответствующий) Код:CspParameters pars = new CspParameters(75, null, "test33");
// если необходимо запретить вывод окна и при неправильном пароле получить ошибку, запрещаем окна
pars.Flags = CspProviderFlags.NoPrompt;
SecureString s = new SecureString();
// заполняем пароль... например так
s.AppendChar('1');
pars.KeyPassword = s;
Gost3410CryptoServiceProvider prov = new Gost3410CryptoServiceProvider(pars);
 если необходимо проверить корректность пароля делаем как уже было сделано выше Код:byte[] dummyHash = new byte[32];
prov.SignHash(dummyHash);
 и связываем сертификат с уже открытым секретным ключем и при необходимости используем этот сертификат со ссылкой на уже открытый и прогруженный ключ.    3 в) Есть сертификат certificate в MY со ссылкой на секретный ключ. Этот метод вариация 3 б), только параметры контейнера мы получаем из ссылки на секретный ключ при помощи кода Код:CspKeyContainerInfo info = ((ICspAsymmetricAlgorithm)certificate.PrivateKey).CspKeyContainerInfo;
 | 
| С уважением, Александр. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
 Сообщений: 49
 Откуда: CHL
 
 | 
            
		      
                Спасибо за примеры и уделенное время Александр. Будем дальше разбираться, пробовать)
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close