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