Работа с другими сервисами
Сервис smev-worker взаимодействует с сервисом smev-proxy-impl или с другими аналогичными сервисам с использованием очередей Kafka. Сервис поддерживает два топика - запросов и ответов, названия топиков указываются в файле настройки сервиса в параметрах
kafka.requestTopic
и kafka.responseTopic
.Примечание
Все сообщения, отправляемые в Kafka, должны быть зашифрованы с использованием алгоритма ГОСТ Р 34.12-2015 «Кузнечик».
При написании приложения, работающего с smev-worker напрямую, минуя smev-proxy-impl, необходимо выполнить следующие шаги:
-
Реализация механизма шифрования/дешифрования сообщений из Kafka с использованием алгоритма ГОСТ Р 34.12-2015 «Кузнечик». В качестве пароля и соли для шифрования/дешифрования используются параметры, указанные в файле настройки smev-worker в параметрах
app.encryptionProvider.password
иapp.encryptionProvider.salt
. -
Реализация продюсера запросов в Kafka: payload - запрос, соответствующий API smev-proxy-impl, в виде json-объекта, преобразованного в строку и зашифрованного с использованием алгоритма ГОСТ Р 34.12-2015 «Кузнечик».
headers:
requestId
- идентификатор запроса, сформированный в формате UUID на основе времени формирования запроса и MAC-адреса компьютера, на котором формировался запрос;payloadType
- полное имя класса запроса в соответствии с API smev-proxy-impl;clientId
- алиас сертификата, загруженного в крипто-сервис, которым необходимо подписать запрос.
Примечание
Запрос не будет обработан при отсутствии любого из этих header.
- Реализация консьюмера ответов из Kafka:
payload
- строка зашифрована и преобразована в строку json-объект ответа в соответствии с API smev-proxy-impl;
headers:
payloadType
- полное имя класса ответа в соответствии с API smev-proxy-impl;requestId
- идентификатор запроса, на который поступил ответ.
Для ускорения написания java-приложений можно воспользоваться уже готовым encryptionProvider. EncryptionProvider реализует механизм шифрования/дешифрования данных с использованием алгоритма ГОСТ Р 34.12-2015 «Кузнечик». Для использования encryptionProvider необходимо выполнить следующее:
- Подключить зависимость:
<dependency>
<groupId>ru.sberbank.gostech.smev</groupId>
<artifactId>smev-encryption-provider</artifactId>
<version>${актуальная версия}</version>
</dependency>
- Создать бин провайдера:
@Bean
SmevEncryptionProvider smevEncryptionProvider(@Value("${app.encryptionProvider.password}") String password,
@Value("${app.encryptionProvider.salt:125f7a7310b8cc27}") String salt) {
return new GOST3412_2015EngineSmevEncryptionProvider(password, salt);
}
- Добавить в файлы настройки параметры
app.encryptionProvider.password
иapp.encryptionProvider.salt
(аналогичные настройкам smev-worker):
app: encryptionProvider: password: "password" salt: "125f7a7310b8cc27"
- Произвести шифрования или дешифровку данных:
//шифрование сообщения перед отправкой в топик Kafka
//jsonMsg - строка, полученная в результате маппинга API объекта
String cipherText = encryptionProvider.encrypt(jsonMsg);
//расшифровка сообщения, полученного из топика Kafka
//payload - строка, полученная из топика
String msg = encryptionProvider.decrypt(payload);
В демопримерах реализованы стандартные сценарии, демонстрирующие работу отдельных сервисов Платформы ГосТех. Отправка тестовых запросов в демопримерах позволит вам ознакомиться с функциями того или иного сервиса. Доступные демопримеры и описания реализованной в них функциональности представлены ниже.
СМЭВ
Отправка тестовых запросов в СМЭВ с присвоением успешно отправленным запросам уникальных идентификаторов