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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline PashaTurokME2019  
#1 Оставлено : 16 ноября 2019 г. 0:15:50(UTC)
PashaTurokME2019

Статус: Участник

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

Доброго времени суток, уважаемые форумчане

Никак не могу найти решение проблемы по инициализации JCPxml.

Исходные данные:
JDK - 1.7.0_05
jcp-2.0.40035 - установлен в JDK 1.7.0_05.

Код:
Код:
80 org.apache.xml.security.Init.init();
81 ru.CryptoPro.JCPxml.xmldsig.JCPXMLDSigInit.init();


Результат:
Код:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xml/security/exceptions/AlgorithmAlreadyRegisteredException
	at ru.CryptoPro.JCPxml.xmldsig.JCPXMLDSigInit.init(Unknown Source)
	at my.test.NewMain.main(NewMain.java:81)


В интернете пишут, что нужно удалить JCPxml.jar из /opt/jdk1.7.0_05/jre/lib/ext, но если так,
то тогда вообще зачем устанавлить КриптоПРО JCP в JRE, а не использовать как обычную библиотеку?

Подскажите, пожалуйста, как правильно решить данную проблему.

Отредактировано пользователем 16 ноября 2019 г. 0:19:48(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 16 ноября 2019 г. 16:23:54(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Кто-то использует библиотеки, в полном комплекте установленные в lib/ext: JCPxml, xmlsec и т.д., другие - копируют в свое приложение, удалив из lib/ext эти библиотеки. При наличии библиотек одновременно в нескольких местах могут возникнуть проблемы: разные версии xmlsec, загрузка разными загрузчиками классов и т.д.
Offline PashaTurokME2019  
#3 Оставлено : 18 ноября 2019 г. 10:07:43(UTC)
PashaTurokME2019

Статус: Участник

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

Евгений, спасибо за ответ. Я это к тому, что описанный стандартный метод
(через установку jcp в /jre/lib/ext) у меня заработал только тогда,
когда я в папку /jre/lib/ext залил библиотеки из jcp-2.0.40035/dependencies.

Согласитесь, что это супер плохое решение,но по другому, к сожалению, не работает.

Здесь пишут:

Цитата:
If we want to use an algorithm shipped with a specific provider from our code, we have three choices:

Register the provider at the JVM installation, copying the provider's jar files to the extensions directory of our JRE installation ($JRE_HOME/lib/ext) and then appending the name of the Provider class at the end of the provider list at the java.security file in $JRE_HOME/lib/security.

Register the provider at run-time, by just calling the addProvider(java.security.Provider provider) static method in the java.security.Security class.

Don't register the provider. Some security entities like Ciphers or MessageDigests allow you to pass the provider object itself as a parameter when specifying an algorithm. This way the provider doesn't need to be registered previously to its use.


Может тогда в качесте стандартного метода нужно предлагать
использование варианта 2 (java.security.Security.addProvider)?
Если возможно идти таким способом, то где можно посмотреть
как это делается?
Offline Евгений Афанасьев  
#4 Оставлено : 18 ноября 2019 г. 13:06:58(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Автор: PashaTurokME2019 Перейти к цитате
описанный стандартный метод
(через установку jcp в /jre/lib/ext) у меня заработал только тогда,
когда я в папку /jre/lib/ext залил библиотеки из jcp-2.0.40035/dependencies.

Об этом я писал - JCPxml и xmlsec (его зависимость) в одной папке.
Автор: PashaTurokME2019 Перейти к цитате

Может тогда в качестве стандартного метода нужно предлагать
использование варианта 2 (java.security.Security.addProvider)?
Если возможно идти таким способом, то где можно посмотреть
как это делается?

Провайдеры могут быть добавлены с помощью Security.addProvider только в сборке JCP А-версии для java 10+.

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