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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline churkin_metasharks  
#1 Оставлено : 24 сентября 2024 г. 14:59:47(UTC)
churkin_metasharks

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

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

Сказал(а) «Спасибо»: 6 раз
Добрый день, подскажите как необходимо проверять и вводить лицензию для JCSP изнутри java кода. Используется серверная ОС Windows с терминалами для работы пользователей.
В системе установлен Крипто Про CSP с введенной лицензией. Было создано java fx приложение, которое использует для подписи JCSP. Спустя 3 месяца при попытке подписать документ начала возникать ошибка лицензии.
Подскажите, каким образом правильно осуществить проверку лицензии JCSP внутри кода java и в случае необходимости вводить лицензию забирая ключ из внешнего источника(например файла), без вызова диалогового окна с вводом лицензии.
Также хотелось бы понимать под каким пользователем должна вводится лицензия? Под администратором или под текущим пользователем и записывается ли она куда-то в реестр.
Можно ли ввести лицензию используя java код без прав администратора?
В собранном java fx приложении используется вложенная jdk, не та, которая установлена в системе, подскажите, какие права и к каким директориям необходим доступ пользователя для считывания и установки лицензии?
При прочтении сообщений на форуме я понял, что ввод лицензии происходит следующим образом:
Цитата:
JCSPLicense license = new JCSPLicense(null, null, "PFXXX-XXXXX-XXXXX-XXXXX-XXXXX");
license.store();

Но не понятно как перед вводом лицензии проверять её актуальное состояние, чтобы каждый раз при запуске приложения не переписывать лицензию, если она уже корректная.
Offline Санчир Момолдаев  
#2 Оставлено : 24 сентября 2024 г. 23:04:36(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 272 раз в 253 постах
Добрый день!

какая версия java?
Техническую поддержку оказываем тут
Наша база знаний
Offline churkin_metasharks  
#3 Оставлено : 25 сентября 2024 г. 13:47:56(UTC)
churkin_metasharks

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Санчир Момолдаев Перейти к цитате
Добрый день!

какая версия java?

Добрый день, Java 17. Версия JavaCSP: java-csp-5.0.42119-A

Отредактировано пользователем 26 сентября 2024 г. 10:25:30(UTC)  | Причина: Не указана

Offline churkin_metasharks  
#4 Оставлено : 26 сентября 2024 г. 21:23:35(UTC)
churkin_metasharks

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

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

Сказал(а) «Спасибо»: 6 раз
Дополню вопрос информацией. На данный момент я нашёл несколько вариантов работы с лицензией для КриптоПро JCSP, но я не уверен в том, корректно ли я с ними работаю.
У объекта, созданного через конструктор
Код:
final License license = new ru.CryptoPro.JCP.tools.License()

Мы можем вызывать следующие методы для получения информации о лицензии:
Код:
license.verifyLicense(); // Проверяет состояние лицензии (значение -1 указывает на просроченную лицензию).
license.getProductID(); // Возвращает ключ текущей лицензии. Локально и на стенде сервера возвращаемое значение тестовой лицензии одинаково: CF20X-X0030-00BAA-****-****.
license.getEndDate(); // Возвращает дату и время истечения текущей лицензии.
license.getDescriptionString(); // Возвращает текстовое описание текущей лицензии.

На локальной машине, у которой есть купленная, действующая лицензия для Крипто Про CSP. Приведу результат вызова методов:
Код:
log.info(license.verifyLicense()); // -1
log.info(license.getEndDate()); // Sun Feb 25 15:15:13 MSK 2024
log.info(license.getDescriptionString()); // "Просроченная серверная неограниченная лицензия для лицензия на право использования на одном сервере с неограниченным кол-вом ядер с шифрованием (общая)."

На сервере с действующей лицензией для КриптоПро CSP и тестовой для JCSP:
Код:
log.info(license.verifyLicense()); // 1
log.info(license.getEndDate()); // Wed Dec 25 14:57:26 MSK 2024
log.info(license.getDescriptionString()); // "Temporary server unlimited license for the license for usage on one server with unlimited amount of cores with encryption (common)."

Метод getProductID() возвращает одинаковое значение как локально, так и на сервере. Однако если вызывать следующую команду через консоль на локальной машине:
Код:
java -cp .;*; ru.CryptoPro.JCSP.JCSPLicense

Получаем следующий результат:
Код:
Determined encoding IBM866 not supported.
Use English locale.
License verify:
Type: Server, sign and encrypt
Allowed amount of cores: Unlimited
Serial number: PF405-60030-*****-**
Validity: Until Feb 25, 2024
Valid license.

Поле серийного номера отличается от productId возвращаемом из кода. Возможно это разные поля, но как тогда получить тот же серийный номер тестовой лицензии при вызове из кода информации о текущей лицензии?

Вопросы:
1. Возможно ли программно задать лицензию без использования контрольной панели (которая не добавлена в проект) и без создания нового LicenseLoader, который наследуется от ru.CryptoPro.JCP.tools.LicenseLoader (как это описано в LicenseLoader.pdf)?
2. Если для решения задачи требуется контрольная панель, какой JAR-файл нужно добавить в проект и как правильно его вызвать из кода? Используя вызов следующей команды через консоль:
Код:
java -cp .;*; ru.CryptoPro.JCP.ControlPane.MainControlPane

Получаю ошибку:
Код:
Error: Unable to initialize main class ru.CryptoPro.JCP.ControlPane.MainControlPane
Caused by: java.lang.NoClassDefFoundError: com/intellij/uiDesigner/core/Spacer

3. Если потребуется создавать собственный LicenseLoader для ввода лицензии из программного кода, как должен выглядеть метод:
Код:
public AbstractLicense getNewLicense() throws Exception;


В приложении используются следующие библиотеки от Крипто Про: AdES-core, ASN1P, asn1rt, bcpkix-jdk15on-1.60, bcprov-jdk15on-1.60, bootstrapfx-core-0.4.0, CAdES, J6CF, J6Oscar, JCP, JCPRevCheck, JCPRevTools, JCryptoP, JCSP, Rutoken.

Отредактировано пользователем 27 сентября 2024 г. 17:32:11(UTC)  | Причина: Не указана

Offline churkin_metasharks  
#5 Оставлено : 27 сентября 2024 г. 18:20:23(UTC)
churkin_metasharks

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

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

Сказал(а) «Спасибо»: 6 раз
При создании переменной лицензии через:
Код:
final JCSPLicense emptyJCSPLicense = new ru.CryptoPro.JCSP.JCSPLicense();

Получаем результат соответствующий тому, что возвращает нам вызов метода проверки лицензии из консоли:
Код:
log.info(license.verifyLicense()); // 0 - Вечная лицензия
log.info(license.getProductID()); // PF405-60030-00REK-*****-*****.
log.info(license.getEndDate()); // Sun Feb 25 15:15:13 MSK 2024
log.info(license.getDescriptionString()); // "Просроченная серверная неограниченная лицензия для лицензия на право использования на одном сервере с неограниченным кол-вом ядер с шифрованием (общая)."

Получается, что для проведения проверки актуальности текущей лицензии нужно использовать именно этот подход? Вопросы из предыдущего сообщения всё еще актуальны. Также подскажите, пожалуйста, какое значение статус кода должна возвращать валидная купленная серверная лицензия при вызове license.verifyLicense()? 0 или другое значение?

Отредактировано пользователем 27 сентября 2024 г. 20:35:42(UTC)  | Причина: Не указана

Offline Санчир Момолдаев  
#6 Оставлено : 2 октября 2024 г. 12:20:31(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 272 раз в 253 постах
0 - означает валидную бессрочную лицензию.
1 - валидную временную.
-1 - просроченную

в JVM11+ и JCP-A / JCSP-A (А в названии) лицензии у каждого пользователя отдельные. т.е. вывод от одного пользователя может не совпадать с выводом другого.

также следует различать лицензии.
JCP: ru.CryptoPro.JCP.tools.License
JCSP: ru.CryptoPro.JCSP.JCSPLicense
JTLS: ru.CryptoPro.ssl.ServerLicense

причем для JCSP нужна еще и валидная лицензия CSP
какой именно вам провайдер нужен? какой именно провайдер будет работать с ключом. JCP / JCSP ?

по поводу ввода лицензии: да, нужно наследоваться от LicenseLoader
либо звать метод store() для сохранения лицензии

Отредактировано пользователем 2 октября 2024 г. 12:28:34(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline churkin_metasharks  
#7 Оставлено : 3 октября 2024 г. 17:21:42(UTC)
churkin_metasharks

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Санчир Момолдаев Перейти к цитате
0 - означает валидную бессрочную лицензию.
1 - валидную временную.
-1 - просроченную

в JVM11+ и JCP-A / JCSP-A (А в названии) лицензии у каждого пользователя отдельные. т.е. вывод от одного пользователя может не совпадать с выводом другого.

также следует различать лицензии.
JCP: ru.CryptoPro.JCP.tools.License
JCSP: ru.CryptoPro.JCSP.JCSPLicense
JTLS: ru.CryptoPro.ssl.ServerLicense

причем для JCSP нужна еще и валидная лицензия CSP
какой именно вам провайдер нужен? какой именно провайдер будет работать с ключом. JCP / JCSP ?

по поводу ввода лицензии: да, нужно наследоваться от LicenseLoader
либо звать метод store() для сохранения лицензии


Нужен JCSP провайдер, следовательно для проверки используется ru.CryptoPro.JCSP.JCSPLicense. Могли бы вы описать механизм наследования от LicenseLoader, потому что не совсем понятно как его необходимо реализовывать. На текущий момент проверяется лицензия при помощи verifyLicense() и getEndDate() и после получения ключа создается new JCSPLicense(null, null, ключ из файла). После этого я делаю store лицензии: jcspLicense.store();
Подскажите, пожалуйста, как мне дополнительно проверить из Java кода дополнительно ещё и CSP лицензию? И можно ли её тоже каким-то образом сохранять через Java код?

Отредактировано пользователем 3 октября 2024 г. 18:07:50(UTC)  | Причина: Не указана

Offline Артемов Алексей  
#8 Оставлено : 4 октября 2024 г. 20:01:04(UTC)
Артемов Алексей

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

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

Поблагодарили: 1 раз в 1 постах
Добрый день.
Цитата:
Могли бы вы описать механизм наследования от LicenseLoader, потому что не совсем понятно как его необходимо реализовывать.

Так как и описано в документации LicenseLoader.pdf
Код:
public class TestLicenseLoader extends LicenseLoader {
    @Override
    protected AbstractLicense getNewLicense() throws Exception {
        License newLic = new JCSPLicense("Owner", "Organization", "SERIAL_NUM_HERE");
        return newLic;
    }
}

Получается больше ненужных строк кода, поэтому если у вас нет какой-то сложной логики просто используйте вариант с new JCSPLicense и методом store()

Цитата:
как мне дополнительно проверить из Java кода дополнительно ещё и CSP лицензию? И можно ли её тоже каким-то образом сохранять через Java код?

Такого функционала нет
thanks 1 пользователь поблагодарил Артемов Алексей за этот пост.
churkin_metasharks оставлено 07.10.2024(UTC)
Offline churkin_metasharks  
#9 Оставлено : 7 октября 2024 г. 13:16:58(UTC)
churkin_metasharks

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Артемов Алексей Перейти к цитате
Добрый день.
Цитата:
Могли бы вы описать механизм наследования от LicenseLoader, потому что не совсем понятно как его необходимо реализовывать.

Так как и описано в документации LicenseLoader.pdf
Код:
public class TestLicenseLoader extends LicenseLoader {
    @Override
    protected AbstractLicense getNewLicense() throws Exception {
        License newLic = new JCSPLicense("Owner", "Organization", "SERIAL_NUM_HERE");
        return newLic;
    }
}

Получается больше ненужных строк кода, поэтому если у вас нет какой-то сложной логики просто используйте вариант с new JCSPLicense и методом store()

Цитата:
как мне дополнительно проверить из Java кода дополнительно ещё и CSP лицензию? И можно ли её тоже каким-то образом сохранять через Java код?

Такого функционала нет


Подскажите, а обязательно ли указывать Owner и Organization при сохранении ключа? Или можно оставить эти поля как null?
Offline Санчир Момолдаев  
#10 Оставлено : 7 октября 2024 г. 14:02:45(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 272 раз в 253 постах
необязательно.
эти поля для удобства конечного пользователя
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
churkin_metasharks оставлено 07.10.2024(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.