Files
Bridge-and-Join-s/services/crypto-service/proto/crypto.proto
T
zuevav 9737c787f9 feat: живой цикл M2M с НРД + мастер установки ключа на флешку
Инфраструктура M2M (живой обмен с НРД через ИШ):
- обработка M2MTransferResponse: ERROR(M2Mxx) → заявка Отклонена, сохранение
  ответа; INFO → ждём Decision; идемпотентность поллера
- fallback-корреляция ответов с нулевым GUID (M2M14/M2M17) по FIFO
- сырой XML ответа НРД в карточке заявки (для пересылки в ТП)
- тестовый пакет роботу приведён к эталону m2m_robot_samples (CostInfo=Yes,
  4 бумаги, IsolationStatus, DocumentSeries=сценарий); override паспорта
- редирект из теста сразу в карточку заявки

Мастер установки ключа Валидаты на флешку (admin/setup/keywizard):
- пошаговый: загрузка .7z+пароль → выбор флешки → запись → справочник
  сертификатов (CRL) → перезапуск+проверка ИШ → готово
- привилегированный воркер (bj-keymedia) в host-namespace через файл-обмен,
  bj-server остаётся в песочнице
- сохранение структуры профиля архива (spr<N>), перечисление съёмных USB

Прочее:
- пакет-доказательство для ТП НРД + форма регистрации участника M2M
- эталонные образцы робота (DOC/m2m_robot_samples)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 00:03:21 +03:00

114 lines
4.2 KiB
Protocol Buffer
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
syntax = "proto3";
package bridge_and_joins.crypto.v1;
option go_package = "git.zetit.ru/zuevav/Bridge-and-Join-s/internal/cryptocli/cryptopb;cryptopb";
option java_package = "ru.zetit.bridgeandjoins.crypto.v1";
option java_multiple_files = true;
// CryptoService — серверная криптография по ГОСТ через КриптоПро JCP.
// Слушает на Unix Domain Socket (по умолчанию /run/bj/crypto.sock).
service CryptoService {
// Проверка XMLDSig-подписи (ГОСТ или RSA). Возвращает сведения о
// подписанте: CN, ИНН (если есть), срок действия сертификата.
rpc VerifyXMLDSig(VerifyRequest) returns (VerifyResponse);
// Подпись XML по ГОСТ — для резервного канала WS ONYX и для
// серверной подписи действий оператора в admin-ui.
rpc SignXMLDSig(SignRequest) returns (SignResponse);
// Health-check.
rpc Health(HealthRequest) returns (HealthResponse);
// Activate — переинициализирует провайдер Валидаты на указанный
// профиль из pki1.conf. Если profile пуст — переходит в
// VCERT_InitMinimal (без доступа к ПСП/ЛСП/ССС). Не требует
// перезапуска сайдкара.
rpc Activate(ActivateRequest) returns (ActivateResponse);
// Shutdown — корректно завершает процесс сайдкара (System.exit(2)
// после отправки ответа). systemd с Restart=on-failure поднимет
// его снова через RestartSec секунд. Используется для UI-кнопки
// «Перезапустить crypto-service» без sudo.
rpc Shutdown(ShutdownRequest) returns (ShutdownResponse);
}
message ActivateRequest {
// Имя профиля в pki1.conf. Пустая строка = minimal mode.
string profile = 1;
}
message ActivateResponse {
// true если провайдер успешно (пере)инициализирован.
bool ok = 1;
// Имя активного провайдера ("validata" / "stub").
string provider = 2;
// Имя активного профиля (пусто для minimal).
string profile = 3;
// Сообщение о результате (для UI).
string message = 4;
}
message ShutdownRequest {}
message ShutdownResponse {
// true означает «запрос принят, процесс завершится через ~500ms».
bool ok = 1;
}
message VerifyRequest {
// Целиком подписанный XML.
bytes payload = 1;
// Профиль ключей и сертификатов: "guest-gost" | "test3-gost" |
// "prod-gost" | "guest-rsa" | ... — определяет хранилище и trust store.
string profile = 2;
}
message VerifyResponse {
// Прошла ли проверка.
bool valid = 1;
// CN из сертификата подписанта.
string signer_cn = 2;
// ИНН из сертификата (если присутствует в OID 1.2.643.3.131.1.1).
string signer_inn = 3;
// Серийный номер сертификата (hex).
string serial = 4;
// Срок действия сертификата (unix epoch, секунды).
int64 not_before = 5;
int64 not_after = 6;
// Тексты ошибок проверки (если valid=false).
repeated string errors = 7;
}
message SignRequest {
// Канонизированный XML, который нужно подписать.
bytes payload = 1;
// Алиас ключа в JCP-keystore.
string key_alias = 2;
// Профиль (тот же что у Verify).
string profile = 3;
}
message SignResponse {
// Подписанный XML (с детачированной или встроенной подписью —
// зависит от профиля).
bytes signed_xml = 1;
}
message HealthRequest {}
message HealthResponse {
bool ok = 1;
string version = 2;
// Активный провайдер криптографии: "cryptopro" | "validata" | "vipnet" | "stub".
string provider = 3;
}