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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline vasiliymoiseenko  
#1 Оставлено : 12 октября 2022 г. 12:29:41(UTC)
vasiliymoiseenko

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

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

Здравствуйте.

Пытаюсь отправить тестовое сообщение в СМЭВ через messagetool-3.1.8
В качестве провйдера использую Криптопро JCP2
Создал контейнер, в нем ключ и сертификат, как на скриншоте:
Snimok ehkrana 2022-10-12 v 14.11.18.png (177kb) загружен 14 раз(а).

В конфигурационном файле config.properties необходимо указать алиас сертификата, алиас приватного ключа и пароль приватного ключа:
Цитата:
signer.certificate.alias=Alias
signer.private.key.alias=Cont
signer.private.key.password=password


При попытке отправить сообщение получаю ошибку
Цитата:
окт 12, 2022 2:22:50 PM ru.CryptoPro.JCP.pref.JCPPref a
INFO: user: 501
окт 12, 2022 2:22:50 PM ru.CryptoPro.JCP.tools.Starter <init>
INFO: Loading JCP 2.0.41789
окт 12, 2022 2:22:50 PM ru.CryptoPro.JCP.tools.Starter <init>
INFO: JCP has been loaded.
[12.10.2022 14:22:51.349] WARN [main] - private key with alias: "Cont" not found
[12.10.2022 14:22:51.353] DEBUG [main] - Инициализируем шаблон загрузки больших файлов
[12.10.2022 14:22:51.462] INFO [main] - Создаем messageId
[12.10.2022 14:22:51.463] DEBUG [main] - Добавляем MTOM приложения (0)
[12.10.2022 14:22:51.463] DEBUG [main] - Подписываем файлы
[12.10.2022 14:22:51.463] DEBUG [main] - Создаем приложения
[12.10.2022 14:22:51.463] DEBUG [main] - Добавляем ftp приложения (0)
[12.10.2022 14:22:51.464] DEBUG [main] - Генерируем дайджесты для приложений
[12.10.2022 14:22:51.464] DEBUG [main] - Генерируем подписи для приложений
[12.10.2022 14:22:51.464] DEBUG [main] - Генерируем приложения
[12.10.2022 14:22:51.464] DEBUG [main] - Добавляем mtom приложения для реестрового запроса (0)
[12.10.2022 14:22:51.464] DEBUG [main] - Генерируем приложения
[12.10.2022 14:22:51.464] DEBUG [main] - Добавляем ftp приложения для реестрового запроса (0)
[12.10.2022 14:22:51.464] DEBUG [main] - Генерируем приложения
[12.10.2022 14:22:51.464] DEBUG [main] - Добавляем routing
[12.10.2022 14:22:51.464] DEBUG [main] - Создаем сообщение
[12.10.2022 14:22:51.465] DEBUG [main] - Посылаем сообщение
[12.10.2022 14:22:51.601] ERROR [main] - Ошибка утилиты
ru.voskhod.smev.client.api.types.exception.SMEVRuntimeException: private key or certificate not set
at ru.voskhod.smev.client.api.signature.impl.SignerImpl.check(SignerImpl.java:158)
at ru.voskhod.smev.client.api.signature.impl.SignerImpl.signXMLDSigDetached(SignerImpl.java:138)
at ru.voskhod.smev.client.api.template.impl.v1_3.WSTemplateImpl.sign(WSTemplateImpl.java:710)
at ru.voskhod.smev.client.api.template.impl.v1_3.WSTemplateImpl.sendRequest(WSTemplateImpl.java:534)
at ru.voskhod.smev.client.api.template.impl.v1_3.WSTemplateImpl.send(WSTemplateImpl.java:512)
at ru.voskhod.smev.client.api.template.impl.TemplateImpl.sendRequestMessage(TemplateImpl.java:213)
at ru.voskhod.smev.client.toolset.message.Main.execute(Main.java:277)
at ru.voskhod.smev.client.toolset.message.Main.main(Main.java:196)
at ExampleSendMessage.main(ExampleSendMessage.java:24)


Подскажите, как правильно указывать алиас приватного ключа и алиас сертификата?
Offline Евгений Афанасьев  
#2 Оставлено : 12 октября 2022 г. 12:37:29(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
В панели алиас ключевого контейнера (в коде обычно alias) - Cont. Что такое алиас сертификата - затрудняюсь сказать, т.к. обычно из ключевого контейнера с одним алиасом получают и ключ, и сертификат.
Попробуйте создать тестовый ключевой контейнер, например, test, в тестовом УЦ и проверить с ним, будет ли сообщение вида "WARN [main] - private key with alias: "test" not found".

P.S. Ключевой контейнер находится в ключевой папке того пользователя, под которым запускается приложение, пользователь имеет доступ к ключевому контейнеру? В примере ExampleSendMessage вы сами можете сделать и проверить, есть ли ключевой контейнер в наличии:
Цитата:

KeyStore keyStore = KeyStore.getInstance("HDImageStore");
keyStore.load(null, null);
Enumeration<String> aliases = keyStore.aliases();
// печать aliases

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

Offline vasiliymoiseenko  
#3 Оставлено : 12 октября 2022 г. 13:45:53(UTC)
vasiliymoiseenko

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

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

Автор: Евгений Афанасьев Перейти к цитате
P.S. Ключевой контейнер находится в ключевой папке того пользователя, под которым запускается приложение, пользователь имеет доступ к ключевому контейнеру?

Действительно, запускал ControlPane.sh  под root и в папку с ключами у меня доступа не было.

Перезашел под собой, создал снова контейнер, в нем сертификат и ключ
Snimok ehkrana 2022-10-12 v 15.40.55.png (196kb) загружен 10 раз(а).

В папке /private/var/opt/cprocsp/keys/vasilijmoiseenko/Cont.000 ключи появились

В настройках указал так
Цитата:
signer.provider=JCP2
signer.certificate.alias=Alias
signer.private.key.alias=Cont
signer.private.key.password=password
signer.smev.certificate.store=


Предыдущий WARN ушел, но исключение все равно бросается
Цитата:
окт 12, 2022 3:37:05 PM ru.CryptoPro.JCP.pref.JCPPref a
INFO: user: 501
окт 12, 2022 3:37:05 PM ru.CryptoPro.JCP.tools.Starter <init>
INFO: Loading JCP 2.0.41789
окт 12, 2022 3:37:05 PM ru.CryptoPro.JCP.tools.Starter <init>
INFO: JCP has been loaded.
[12.10.2022 15:37:06.106] DEBUG [main] - Инициализируем шаблон загрузки больших файлов
[12.10.2022 15:37:06.217] INFO [main] - Создаем messageId
[12.10.2022 15:37:06.218] DEBUG [main] - Добавляем MTOM приложения (0)
[12.10.2022 15:37:06.219] DEBUG [main] - Подписываем файлы
[12.10.2022 15:37:06.219] DEBUG [main] - Создаем приложения
[12.10.2022 15:37:06.219] DEBUG [main] - Добавляем ftp приложения (0)
[12.10.2022 15:37:06.219] DEBUG [main] - Генерируем дайджесты для приложений
[12.10.2022 15:37:06.219] DEBUG [main] - Генерируем подписи для приложений
[12.10.2022 15:37:06.219] DEBUG [main] - Генерируем приложения
[12.10.2022 15:37:06.219] DEBUG [main] - Добавляем mtom приложения для реестрового запроса (0)
[12.10.2022 15:37:06.219] DEBUG [main] - Генерируем приложения
[12.10.2022 15:37:06.219] DEBUG [main] - Добавляем ftp приложения для реестрового запроса (0)
[12.10.2022 15:37:06.219] DEBUG [main] - Генерируем приложения
[12.10.2022 15:37:06.219] DEBUG [main] - Добавляем routing
[12.10.2022 15:37:06.220] DEBUG [main] - Создаем сообщение
[12.10.2022 15:37:06.220] DEBUG [main] - Посылаем сообщение
[12.10.2022 15:37:06.351] ERROR [main] - Ошибка утилиты
ru.voskhod.smev.client.api.types.exception.SMEVRuntimeException: private key or certificate not set
at ru.voskhod.smev.client.api.signature.impl.SignerImpl.check(SignerImpl.java:158)
at ru.voskhod.smev.client.api.signature.impl.SignerImpl.signXMLDSigDetached(SignerImpl.java:138)
at ru.voskhod.smev.client.api.template.impl.v1_3.WSTemplateImpl.sign(WSTemplateImpl.java:710)
at ru.voskhod.smev.client.api.template.impl.v1_3.WSTemplateImpl.sendRequest(WSTemplateImpl.java:534)
at ru.voskhod.smev.client.api.template.impl.v1_3.WSTemplateImpl.send(WSTemplateImpl.java:512)
at ru.voskhod.smev.client.api.template.impl.TemplateImpl.sendRequestMessage(TemplateImpl.java:213)
at ru.voskhod.smev.client.toolset.message.Main.execute(Main.java:277)
at ru.voskhod.smev.client.toolset.message.Main.main(Main.java:196)
at ExampleSendMessage.main(ExampleSendMessage.java:26)

Process finished with exit code 1


Правильно ли я понимаю, что сейчас дело в сертификате? Что с ним не так?

UPDATE!
Действительно не находит сертификат по алиасу, возвращается null в этой строчке
X509Certificate certificate = (X509Certificate)this.ks.getCertificate(alias);

Но почему он его не может найти в HDImageStore по алиасу не понимаю пока. Может у кого то есть мысли?

Отредактировано пользователем 12 октября 2022 г. 15:44:21(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 14 октября 2022 г. 0:20:07(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Автор: vasiliymoiseenko Перейти к цитате

Действительно не находит сертификат по алиасу, возвращается null в этой строчке
X509Certificate certificate = (X509Certificate)this.ks.getCertificate(alias);

А PrivateKey находит с помощью getKey?
В панели на картинке у вас контейнер с сертификатом.
Контейнер без сертификата можно создать, но только с помощью, например, csptest. В панели у него будет только "Ключ".

Offline vasiliymoiseenko  
#5 Оставлено : 14 октября 2022 г. 7:20:27(UTC)
vasiliymoiseenko

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

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

Решил проблему следующим образом, почти как тут: https://www.cryptopro.ru....aspx?g=posts&t=9362

1. Создал новый контрейнер с ключами и сертификатом через ComLine,  сертификат сразу экспортировал в файл в формате base64
2. Удостоверил сертификат в https://www.cryptopro.ru/certsrv/, сохранил цепочку в p7b
3. Импортировал сертификат обратно в контейнер через keytool

Не знаю как, но это помогло, уже другое исключение выскакивает)
Отсюда вопрос, обязательно ли сертификат должен быть удовстоверен в УЦ? Или с тем что я сгенерировал тоже можно работать?
P.S. Пока еще плохо все понимаю, повторно изучаю документацию, извините если глупые вопросы задаю)

Отредактировано пользователем 14 октября 2022 г. 7:29:42(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#6 Оставлено : 14 октября 2022 г. 9:38:04(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
1. Проблема с getCertificate(alias) не ясна, т.к. метод вернет null, только если А) контейнера с таким алиасом не существует, Б) в контейнере нет сертификата (например, контейнер без сертификата можно создать в csptest) или для данного типа ключа нет сертификата. В случае, если сертификат/цепочка в контейнере есть, getCertificate вернет сертификат подписи.
2. Контейнеры, созданные с помощью JCA, например, с использованием ComLine, всегда содержат как минимум один сертификат (самоподисанный). Если установить в контейнер p7b, то в нем уже будет цепочка сертификатов. В каких-то случаях требуется именно она (например, keytool может установить в контейнер только p7b).
3. Стороннее ПО всегда имеет свои особенности.
"обязательно ли сертификат должен быть удовстоверен в УЦ?" - вряд ли это имеет значение, но может быть важно при операциях с цепочкой сертификатов (например, в ПО возможна проверка цепочки сертификатов). К getCertificate(alias) отношения не имеет, т.к. если в контейнере есть хотя бы один сертификат, он будет извлечен. Но для СМЭВ в дальнейшем может быть важно, что у вас за сертификат и каким УЦ он выпущен.

Отредактировано пользователем 14 октября 2022 г. 9:39:11(UTC)  | Причина: Не указана

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