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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline YuidnAO  
#1 Оставлено : 24 октября 2025 г. 13:31:30(UTC)
YuidnAO

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

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

Добрый день. Пытаюсь подписать Data для работы с api ЧЗ.

static void main() throws IOException, KeyStoreException, NoSuchProviderException, CertificateException, NoSuchAlgorithmException, UnrecoverableKeyException, SignatureException, InvalidKeyException {
String password = "12345678";
String keyAlias = "Иванов Иван Иваныч";

InputStream privateKeyInputStream = new FileInputStream("file.pfx");

//загружаю в хранилище ключей подпись
KeyStore keyStore = KeyStore.getInstance(JCSP.PFX_STORE_NAME, JCSP.PROVIDER_NAME);
keyStore.load(privateKeyInputStream, password.toCharArray());

//получил закрытый ключ из подписи
PrivateKey privateKey = (PrivateKey) keyStore.getKey(keyAlias, password.toCharArray());
System.out.println("privateKey " + privateKey.toString());
//получил сертификат
var cert = keyStore.getCertificate(keyAlias);
byte [] data = "sss-ssss-ssss".getBytes(); // то, что нужно подписать

//создал подпись
Signature sig = Signature.getInstance(JCP.GOST_SIGN_2012_256_NAME); // создал подпись с этой константой, потому что в сертификате из file.pfx увидел это GOST3411_2012_256withGOST3410_2012_256

//инициализировал
sig.initSign(privateKey);
byte[] signatureBytes = sig.sign();
String combined = Base64.getEncoder().encodeToString(cert.getEncoded())+
Base64.getEncoder().encodeToString(signatureBytes);
System.out.println("Combined: " + combined);}

Подскажите, почему подпись не валидна? искренне пытался сам найти ответ в руководстве и в темах на форуме, но уже не понимаю сам куда копать и что не так делаю
Offline Евгений Афанасьев  
#2 Оставлено : 24 октября 2025 г. 13:55:43(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 738 раз в 696 постах
Добрый день.

Возможно, вам нужна не "голая" подпись (64 байта), а, например, CMS или CAdES? Тогда подписывать надо не данные, а атрибуты.
В samples-sources.jar есть примеры: в пакете CMS - низкоуровневые, в CAdES - высокоуровневые.
Посмотрите пример digital_marking.DigitalMarkingExample в samples-sources.jar.
Offline YuidnAO  
#3 Оставлено : 27 октября 2025 г. 5:10:03(UTC)
YuidnAO

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

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

Автор: Евгений Афанасьев Перейти к цитате
Добрый день.

Возможно, вам нужна не "голая" подпись (64 байта), а, например, CMS или CAdES? Тогда подписывать надо не данные, а атрибуты.
В samples-sources.jar есть примеры: в пакете CMS - низкоуровневые, в CAdES - высокоуровневые.
Посмотрите пример digital_marking.DigitalMarkingExample в samples-sources.jar.


С добрым утром. Извиняюсь за главное , не информативное сообщение к этой теме.
Для работы с методами апи честного знака необходимо выполнить 2-а шага:
1. Запрос аутентификации. Отправляешь Гет запрос на определенный адрес, а в ответ приходит две строки
{
"uuid": "19dfb29a-111-54zsss-afas5-12421asgasgas",
"data": "zbzxbxzbdassafas21asd"
}.
2. Получение ключа сессии.
2.1 Необходимо значение из "data" подписать электронной подписью зарегистрированного участника оборота товаров. Это случайные
данные в base64 (присоединённая электронная подпись) (выкопировка из Описание TrueApi v546.0). В инструкциях приведен сайт (https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html), на котором можно подписать
, а также можно использовать программу КрипроАРМ, которая подпишет эту "data".
2.2. Сделать пост запрос на определенный адрес, где в боди необходимо указать "uuid" и "data". В дата указываются данные полученные из пункта 2.1.
В ответ приходит токен, который используется для дальнейших любых запросов в честный знак (создать карточку товара, посмотреть коды маркировки и прочее.)

Так вот, чтобы в ручную не исполнять пункт 2.1. т.е. копировать из стороннего по подписанные данные "data" начал искать решение. Наткнулся на КрипроПроJCP. И , в дальнейшем, написал эту тему
на форуме.
Прошу подсказки, туда ли копаю или все-таки не туда.
Благодарю за ответ, сейчас будут вникать в samples-sources.jar
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.