Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline maximkosheev  
#1 Оставлено : 5 января 2019 г. 7:31:06(UTC)
maximkosheev

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.10.2018(UTC)
Сообщений: 36
Российская Федерация

Сказал(а) «Спасибо»: 4 раз
Добрый день, уважаемые форумчане!
Заранее приношу свои извинения за создание новой темы, но в предыдущий раз я так и не получил ответа.
Итак, этот вопрос некое продолжение вот этого топика https://www.cryptopro.ru/forum2/...aspx?g=posts&t=14918.
Кратко в чем суть проблемы:
Есть ЭЦП на внешнем ключевом носителе (сразу скажу, что она не менялась при переходе с 2018 на 2019 годы).

Есть веб-сервис, на котором для входа используется ЭЦП. Если на этот сервис войти через браузер, то активируется плагин для браузера
(CryptoPro CAdES-plugin), формируется ЭЦП и вход успешно выполняется (так было и в 2018, так продолжает работать в 2019 годах).

Стоит задача написать desktop приложение на java для работы с этим сервисом. Для формирование ЭЦП был выбрал набор классов из состава JCP.
Во время разработки в 2018 году выводилось уведомление о необходимости перехода на ГОСТ 34.10-2012 с 01.01.2019, но это было уведомление, но
подпись успешно формировалась и вход на сервис через приложение успешно выполнялся.

Наступил 2019 год (повторюсь, никаких действий по переходу на ГОСТ 34.10-2012 с моей стороны не выполнялось). Вход через браузер (CryptoPro CAdES-plugin)
продолжает успешно работать, а вот формирование подписи через JCP уже "отваливается" с исключением (использовать ГОСТ 34.10-2001 запрещено).

Возникает несколько вопросов:
1. Почему же работает плагин для браузера?
2. Как с помощью классов JCP создать подпись в 2019 повторив функционал плагина?
Offline Евгений Афанасьев  
#2 Оставлено : 5 января 2019 г. 13:06:09(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,915
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 687 раз в 648 постах
Здравствуйте.
Автор: maximkosheev Перейти к цитате

Во время разработки в 2018 году выводилось уведомление о необходимости перехода на ГОСТ 34.10-2012 с 01.01.2019, но это было уведомление, но
подпись успешно формировалась и вход на сервис через приложение успешно выполнялся.
Наступил 2019 год (повторюсь, никаких действий по переходу на ГОСТ 34.10-2012 с моей стороны не выполнялось). Вход через браузер (CryptoPro CAdES-plugin)
продолжает успешно работать, а вот формирование подписи через JCP уже "отваливается" с исключением (использовать ГОСТ 34.10-2001 запрещено).
Возникает несколько вопросов:
1. Почему же работает плагин для браузера?
2. Как с помощью классов JCP создать подпись в 2019 повторив функционал плагина?

В используемой вами версии jcp есть ограничение на использование ГОСТ 2001.
1. Плагин и jcp - разные продукты и могут вести себя по-разному.
2. Обновить jcp до последней версии с сайта или следовать инструкциям https://support.cryptopr...-v-kriptopro-jcp-2039014 и https://support.cryptopr...410-2001-v-kriptopro-jcp

Offline maximkosheev  
#3 Оставлено : 9 января 2019 г. 22:27:07(UTC)
maximkosheev

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.10.2018(UTC)
Сообщений: 36
Российская Федерация

Сказал(а) «Спасибо»: 4 раз
Из предложенных вами решений выбрал вариант с переходом на последнюю версию JCP версии 2.0.40035.
После перехода на эту версию описанная выше проблема устранилась, однако появились новые.
1. Не могу создать подпись по причине вот такой ошибки:
Код:

Invalid encryption oid 1.2.643.2.2.19 (invalid private key algorithm or encryption algorithm), expected: 1.2.643.2.2.98; error codes: [109] 'Algorithm mismatch', 
	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)

Хочу обратить внимание на то, что код формирования подписи не изменялся, а при работе с версией JCP 2.0.39014 такой ошибки не возникало.

2. Очень часто стали появляться ошибки такого рода:
Код:

янв 10, 2019 12:19:09 AM ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 2.0.40035
янв 10, 2019 12:19:09 AM ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
янв 10, 2019 12:19:09 AM ru.CryptoPro.JCP.KeyStore.Rutoken.cl_2 readFile
WARNING: ERROR
java.io.IOException: java.lang.IllegalStateException: Card has been disconnected
	at ru.CryptoPro.JCP.KeyStore.Rutoken.cl_2.readFile(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.ContainerEncoder.readName(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_4.a(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_10.b(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_10.b(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_12.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at ru.CryptoPro.JCP.KeyStore.cl_10.c(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_10.<init>(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineAliases(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineAliases(Unknown Source)
	at java.security.KeyStore.aliases(KeyStore.java:1235)
	at net.monsterdev.automosreg.services.impl.CryptoServiceImpl.getCertificatesList(CryptoServiceImpl.java:97)
        ...
Caused by: java.lang.IllegalStateException: Card has been disconnected
	at sun.security.smartcardio.CardImpl.checkState(CardImpl.java:109)
	at sun.security.smartcardio.CardImpl.endExclusive(CardImpl.java:222)
	at ru.CryptoPro.JCP.KeyStore.Rutoken.pc_0.cl_2.d(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.Rutoken.pc_1.cl_4.c(Unknown Source)
	... 45 more

янв 10, 2019 12:19:09 AM ru.CryptoPro.JCP.KeyStore.Rutoken.cl_2 readFile
WARNING: ERROR
java.io.IOException: java.lang.IllegalStateException: Card has been disconnected
	at ru.CryptoPro.JCP.KeyStore.Rutoken.cl_2.readFile(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.ContainerEncoder.isHeaderExist(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_4.a(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_10.b(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_10.b(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_12.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at ru.CryptoPro.JCP.KeyStore.cl_10.c(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_10.<init>(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineAliases(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineAliases(Unknown Source)
	at java.security.KeyStore.aliases(KeyStore.java:1235)
	at net.monsterdev.automosreg.services.impl.CryptoServiceImpl.getCertificatesList(CryptoServiceImpl.java:97)
        ...
Caused by: java.lang.IllegalStateException: Card has been disconnected
	at sun.security.smartcardio.CardImpl.checkState(CardImpl.java:109)
	at sun.security.smartcardio.CardImpl.endExclusive(CardImpl.java:222)
	at ru.CryptoPro.JCP.KeyStore.Rutoken.pc_0.cl_2.d(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.Rutoken.pc_1.cl_4.d(Unknown Source)
	... 45 more

янв 10, 2019 12:19:09 AM ru.CryptoPro.JCP.KeyStore.J6CF.CardReader lock
INFO: Выбран первый доступный считыватель (Aktiv Co. ruToken 0)
янв 10, 2019 12:19:09 AM ru.CryptoPro.JCP.KeyStore.J6CF.CardReader lock
WARNING: ERROR
java.io.IOException
	at ru.CryptoPro.JCP.KeyStore.J6CF.CardReader.lock(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.cl_19.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at ru.CryptoPro.JCP.KeyStore.ContainerStore.a(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineAliases(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineAliases(Unknown Source)
	at java.security.KeyStore.aliases(KeyStore.java:1235)
	at net.monsterdev.automosreg.services.impl.CryptoServiceImpl.getCertificatesList(CryptoServiceImpl.java:97)
	...
Caused by: javax.smartcardio.CardException: Карта не вставлена (считыватель: Aktiv Co. ruToken 0) 
	at ru.CryptoPro.JCP.KeyStore.J6CF.ReaderMedia.a(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.J6CF.ReaderMedia.init(Unknown Source)
	... 40 more

При том, что карта постоянно установлена. Такая ошибка то возникает, то нет. Опять таки с версией JCP 39014 такого не наблюдалось.

3. Случайно удалил примеры кода идущие вместе с JCP, где можно их скачать?
Offline Евгений Афанасьев  
#4 Оставлено : 10 января 2019 г. 9:47:57(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,915
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 687 раз в 648 постах
Здравствуйте.
1. В последних версиях была добавлена проверка на соответствие передаваемого в addSigner oid'а алгоритма и oid'а алгоритма ключа. Соответственно, для ключа обмена (privateKey в addSigner) ожидается 1.2.643.2.2.98. Пожалуй, проще задать там null у encryptionAlg и null у digestAlg (обычно второй и третий параметр addSigner, после имени провайдера).
2. Лог немного странный, так как есть исключения и из Rutoken.jar (например, ru.CryptoPro.JCP.KeyStore.Rutoken.cl_2.readFile), и J6CF (обертка над smartcardio для работы с токенами). правильно понимаем, что в getCertificatesList используется перечисление всех key store и поиск сертификата по ним? В итоге сертификат не найден нигде (поиск происходит по порядку: HDImageStore, RutokenStore, J6CFStore?).
Включите, пожалуйста, логирование JCPLogger с уровнем ALL (https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/45/6/vkljuchenie-zhurnlirovnija-kriptopro-jcp), соберите лог и приложите (в будущем в любом случае потребуется использовать Rutoken.jar, т.к. модуль от Актив не развивается).
Пока можно попробовать переключиться на вариант с модулем поддержки от Актив (как для 39014, у него имя хранилища то же самое), установив его, но придется удалить модуль Rutoken.jar (под управлением учетной записи администратора):
<JRE>/bin/java ru.CryptoPro.JCP.KeyStore.Rutoken.Install -uninstall
Если это windows, то после физически удалить Rutoken.jar из JRE.
3. Все примеры находятся в дистрибутиве JCP, в файле samples-sources.jar.
Offline maximkosheev  
#5 Оставлено : 10 января 2019 г. 20:17:01(UTC)
maximkosheev

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.10.2018(UTC)
Сообщений: 36
Российская Федерация

Сказал(а) «Спасибо»: 4 раз
Цитата:

правильно понимаем, что в getCertificatesList используется перечисление всех key store и поиск сертификата по ним? В итоге сертификат не найден нигде (поиск происходит по порядку: HDImageStore, RutokenStore, J6CFStore

Да, все верно. getCertificatesList формирует список сертификатов, находящихся на всех хранилищах, доступных через JCP провайдера.
В приложенном файле находится лог (вернее та его часть, которая относится к теме)
jcplog.txt (59kb) загружен 4 раз(а).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.