logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline alex303  
#1 Оставлено : 11 апреля 2018 г. 7:15:19(UTC)
alex303

Статус: Новичок

Группы: Участники
Зарегистрирован: 19.12.2017(UTC)
Сообщений: 4

Добрый день,

Вопрос первый.

Есть сертификат с запароленным контейнером закрытого ключа.
Хочу зашифровать/расшировать узел xml-документа с помощью сертификата (примерно как в примерах cryptopro sdk) но категорически не хочу окно ввода пин'а ибо сервер...

Проблема следующая: при расшифровке узла xml'я, и при _не задании_ пин кода случается окошко ввода этого самого пина.
запрос пина вызывает вот этот метод: CPEncryptedXml.DecryptKeyClass

Например, при вычислении подписи, метод ComputeSignature имеет параметр silent, и при наличии пина на контейнер и не задании самого пина случается CryptographicException, что логично.
Но аналогичного механизма при расшифровке xml'я (аналог параметра silent) я не нашел. Как быть?

Вопрос второй.

Если я устанавливаю пин-код на контейнер в коде:

((Gost3410CryptoServiceProvider)(certificate.PrivateKey)).SetContainerPassword("12345");

то как потом его сбросить (чтобы при последующем вызове без указания пин-кода случилось исключение/окно запроса пин-кода)?

Пробовал делать так:

certificate.PrivateKey.Dispose();
certificate.Reset();

но, после магии в CPEncryptedXml.DecryptKeyClass закрытый ключ все равно доступен без пина.


ps.
CSP 4.0.9914
версия шарпея 1.0.6397.0





Offline Максим Коллегин  
#2 Оставлено : 11 апреля 2018 г. 12:00:18(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,272
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 481 раз в 438 постах
На сервере лучше бы использовать контейнер без пина.
Для сброса пина видимо нужно использовать вызовы p\invoke CryptSetProvParam(PP_SIGNATURE_PIN, NULL)

В следующих версиях КриптоПро .NET должен работать этот вызов:
((Gost3410CryptoServiceProvider)(certificate.PrivateKey)).SetContainerPassword(null);
Знания в базе знаний, поддержка в техподдержке
Offline alex303  
#3 Оставлено : 11 апреля 2018 г. 12:09:15(UTC)
alex303

Статус: Новичок

Группы: Участники
Зарегистрирован: 19.12.2017(UTC)
Сообщений: 4

Автор: Максим Коллегин Перейти к цитате
На сервере лучше бы использовать контейнер без пина.

Этим я никак не могу управлять...

Автор: Максим Коллегин Перейти к цитате

В следующих версиях КриптоПро .NET должен работать этот вызов:
((Gost3410CryptoServiceProvider)(certificate.PrivateKey)).SetContainerPassword(null);


Во!Вот это будет прям очень супер... буду ждать.
Спс.
Offline Максим Коллегин  
#4 Оставлено : 12 апреля 2018 г. 10:42:10(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 5,272
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 11 раз
Поблагодарили: 481 раз в 438 постах
Сделали. Выложил в директории 1.0.6675.0
Протестируйте и отпишите по возможности - выложу для всех.
Знания в базе знаний, поддержка в техподдержке
Offline alex303  
#5 Оставлено : 12 апреля 2018 г. 14:43:34(UTC)
alex303

Статус: Новичок

Группы: Участники
Зарегистрирован: 19.12.2017(UTC)
Сообщений: 4

Автор: Максим Коллегин Перейти к цитате

Протестируйте и отпишите по возможности - выложу для всех.


На первый взгляд, все работает как надо... По крайней мере, модульные тесты, которые раньше падали теперь работают... Спасибо за оперативность!
Еще бы педаль для EncryptedXml, чтоб вместо запроса пина вываливался эксепшн - было бы вообще отлично.

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.