Форум КриптоПро
»
Устаревшие продукты
»
КриптоПро CSP 3.6
»
Предварительное открытие контейнера для исключение повторного ввода пароля
Статус: Участник
Группы: Участники
Зарегистрирован: 18.05.2011(UTC) Сообщений: 24 Откуда: Moscow
|
В .NET программе требуется открыть запароленный контейнер для того, чтобы выполнить подписание нескольких файлов одним ключом без повторного запроса пароля. Как это сделать с помощью Sharpei у вас написано (http://www.cryptopro.ru/forum2/Default.aspx?g=posts&t=2930). Мне надо без Sharpei. Если этого нельзя на чистом .net, то пойдет и c/c++ (вызову через p/invoke). Исходные данные - сертификат. Пробовал так (вариант 3в из f.a.q.): Код:
01 public static byte[] SignMsg(Byte[] msg, X509Certificate2 signerCert)
02 {
03 var contentInfo = new ContentInfo(msg);
04 var signedCms = new SignedCms(contentInfo, detached: false);
05 CspKeyContainerInfo info = ((ICspAsymmetricAlgorithm)signerCert.PrivateKey).CspKeyContainerInfo;
06 var pars = new CspParameters(info.ProviderType, info.ProviderName, info.KeyContainerName);
07 var password = "11111";
08 pars.Flags = CspProviderFlags.UseExistingKey;
09 pars.KeyNumber = (int)KeyNumber.Signature;
10 var s = new SecureString();
11 foreach (var c in password)
12 s.AppendChar(c);
13 pars.KeyPassword = s;
14 var signer = new CmsSigner(pars); // здесь исключение
15 signedCms.ComputeSignature(signer, silent: false);
16 return signedCms.Encode();
17 }
В строке 14 возникает исключение CryptographicException "Key does not exist.". Обращает на себя внимание то, что (CspKeyContainerInfo info).Protected равно false (в строке 06). Хотя контейнер запаролен. Если строки 05-14 заменить на (т.е. создание CmsSigner по сертификату): Код:
var signer= new CmsSigner(signerCert);
signedCms.ComputeSignature(signer, silent: false);
то все работает: пароль запрашивается, cms формируется. Подскажите, пожалуйста, как подписать несколько раз одним ключом по сертификату без Sharpei?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,453  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 748 раз в 643 постах
|
Попробуйте сохранить пароль в контексте сертификата. |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.05.2011(UTC) Сообщений: 24 Откуда: Moscow
|
maxdm написал:Попробуйте сохранить пароль в контексте сертификата. А каким образом это сделать? И что такое "контекст сертификата"? )
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.05.2011(UTC) Сообщений: 24 Откуда: Moscow
|
maxdm написал:Попробуйте сохранить пароль в контексте сертификата. По-другому спрошу: - как правильно получить контекст сертификата, имея экземпляр X509Certificate2, связанный с ключом в контейнере? - как получить пароль первый раз (варианта два: надо как-то узнать, что контейнер имеет пароль и спросить пользователя заранее, либо доверится КриптоПро, чтобы он сам запросил пароль, но тогда как его получить потом)? - как сохранить пароль в контексте сертификата? Речь ведь про использование CertSetCertificateContextProperty(?), в каком свойстве сохранять пароль?
|
|
|
|
|
|
Форум КриптоПро
»
Устаревшие продукты
»
КриптоПро CSP 3.6
»
Предварительное открытие контейнера для исключение повторного ввода пароля
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close