Статус: Новичок
Группы: Участники
Зарегистрирован: 17.07.2015(UTC) Сообщений: 3  Сказал(а) «Спасибо»: 1 раз
|
Всем доброго времени суток. Есть маленькая программа на C#, которая является почти полной копией примера из .NET SDK, которая делает следующее: читает из хранилища компьютера сертификат по серийнику, и генерирует подпись для строки, используя этот сертификат. Код выглядит примерно так -
Цитата:var content = Encoding.ASCII.GetBytes("TestString"); ContentInfo contentInfo = new ContentInfo(content); SignedCms signedCms = new SignedCms(contentInfo, true); CmsSigner cmsSigner = new CmsSigner(cert); signedCms.ComputeSignature(cmsSigner,true); Console.WriteLine(signedCms.Encode());
на ComputeSignature вываливается ошибка Цитата: System.Security.Cryptography.CryptographicException: Неправильный открытый ключ поставщика.
в System.Security.Cryptography.Pkcs.PkcsUtils.CreateSignerEncodeInfo(CmsSigner signer, Boolean silent) в System.Security.Cryptography.Pkcs.SignedCms.Sign(CmsSigner signer, Boolean silent) в System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature(CmsSigner signer, Boolean silent)
При этом: - на машине, где запускается программа, установлен КриптоПро CSP и КриптоПро .NET
- сертификат успешно находится
- cmsSigner.DigestAlgorithm.FriendlyName = ГОСТ Р 34.11-94
- программа запускается от пользователя у которого есть полные права на приватные ключи сертификата
- сертификат находится в контейнере, который защищен паролем, который мне неизвестен
- в оснастке "сертификаты" сертификат отображается как валидный (корневой сертификат также присутствует)
Вопросы следующие: - как исправить данную ошибку?
- можно ли решить проблему без знания пароля на контейнер Крипто Про?
 osinfo.xml (62kb) загружен 1 раз(а). osinfo.xml (62kb) загружен 1 раз(а).Отредактировано пользователем 17 июля 2015 г. 16:49:39(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:на ComputeSignature вываливается ошибка Цитата:5. сертификат находится в контейнере, который защищен паролем, который мне неизвестен Для подписи нужен закрытый ключ, соответственно без пароля подписать не удастся. Цитата:как исправить данную ошибку? Попробуйте Код:signedCms.ComputeSignature(cmsSigner,false);
Должно появиться окно с запросом пароля. |
|
 1 пользователь поблагодарил Кирилл Соболев за этот пост.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.08.2010(UTC) Сообщений: 259 Откуда: Moscow
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 11 раз в 10 постах
|
Извините, а лицензия на КриптоПро CSP не истекла? Сталкивался с таким фактом: по истечении трех месяцев (установка без ввода лицензии) для некоторых сборок CSP 3.6 CAPICOM, у меня используется, начинает выдавать интересные ошибки: то контейнер не правильный, то ключ в контейнере порушен.... Проверьте лицензии. PS: Что касается ПИН кода, или пароля на контейнер закрытого ключа издатели обычно устанавливают пин код "по умолчанию" цифирки "12345678" или "1234567890" и если пользователь не менял пин код то можно спросить у издателя - "А какой у вас пин код по умолчанию?" Отредактировано пользователем 20 июля 2015 г. 8:16:48(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 17.07.2015(UTC) Сообщений: 3  Сказал(а) «Спасибо»: 1 раз
|
Спасибо отписавшимся в теме. Попробую еще уточнить ситуацию:
Если не указывать режим silent, то появляется окно для ввода пароля. После ввода пароля на контейнер складывалось ощущение, что программа зависла - просто ничего не происходило и все.
Получил тестовый сертификат, тестирую с ним (на него пароль мне известен).
Выяснил, что через примерно минуту(!) после ввода пароля подпись все же генерируется, и соответственно выполнение идет далее. (С боевым сертификатом была та же история, но я не знал что процесс подписи все еще идет, и выходил из своей утилиты, думая, что она "зависла")
@Boris@Serezhkin.com: КриптоПро свежеустановленный, но без лицензии. По поводу пин-кода - см. выше.
Теперь вопрос такой - почему так долго происходит процесс генерации подписи?
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 17.07.2015(UTC) Сообщений: 3  Сказал(а) «Спасибо»: 1 раз
|
Автор: NIkolaySekretov  Теперь вопрос такой - почему так долго происходит процесс генерации подписи?
Отвечу себе же. Код:CmsSigner cert = new CmsSigner(signer) {IncludeOption = X509IncludeOption.EndCertOnly};
решило проблему.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.08.2010(UTC) Сообщений: 259 Откуда: Moscow
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 11 раз в 10 постах
|
Автор: NIkolaySekretov  Код:CmsSigner cert = new CmsSigner(signer) {IncludeOption = X509IncludeOption.EndCertOnly};
решило проблему. Ну вот еще один человек наступил на эти грабли. Предыдущий удивлялся что подпись у него на 5 кб больше и портал не принимает. Может в FAQу внести? И еще не понимаю почему в шарпе в подпись включается цепочка сертификатов по умолчанию? Это же надо их извлечь, проверить.... Как я помню в CryptoAPI в подпись включается только один сертификат. И чтобы включить цепочку даже не придумаю навскидку как это сделать?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,453  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 748 раз в 643 постах
|
Долго - это особенность .net - тоже на форуме было. что-то связанное с поиском в AD. |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,453  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 748 раз в 643 постах
|
|
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close