TrustNetServer

Материал из Сервис Облачной Демократии
Перейти к: навигация, поиск

Содержание

Общий порядок взаимодействия серверов сети доверия между собой

По мере накопления новых пакетов на исходном сервере, периодически производится их рассылка на связанные сервера.

  1. В цикле по всем серверам назначения:
    1. Исходный сервер анализирует path во всех новых пакетов и выбирает только те пакеты, в которых в path отсутствует данный сервер назначения;
    2. Данные отобранных пакетов помещаются в оперативный кэш если их там еще нет;
    3. Формируется документ - анонс новых пакетов для сервера назначения;
    4. Документ-анонс новых пакетов подписывается транспортным ключем сервера;
    5. Документ-анонс отправляется на сервер назначения на URL http://<адрес сервера>/s2s/new_packets

Сервер назначения, после получения анонса новых пакетов с другого сервера делает следующее:

  1. Производит проверку допуска данного сервера для передачи данных:
    1. Определяет исходящий сервер;
    2. Ищет в сети доверия удостоверение админа сервера источника и публичного транспортного ключа сервера-источника;
    3. Проверяет что удостоверение админа, включающее публичный транспортный ключ данного сервера источника подписаны админом данного сервера назначения;
    4. Проверяет подпись документа-анонса транспортным ключем сервера источника;
  2. Проверяет наличие идентификаторов присланных пакетов в локальной базе сервера назначения;
  3. Для всех пакетов, которые отсутствуют в базе:
    1. Ставится блокировка на добавление данного пакета (что-бы избежать параллельного добавления одного пакета);
    2. С сервера источника по пути http://<адрес сервера источника>/s2s/get_packet?<id пакета> запрашивается содержимое пакета;
    3. Пакет добавляется в локальную базу;
    4. Отменяется блокировка на добавление данного пакета;

Формат используемых для межсерверного общения данных

Дополнительное удостоверение для подписания админа и сервера

["<персональный идентификатор админа-удостоверителя>",
 "<текущее время GMT в формате UNIXTIME>",
 "<UUID 00000000-0000-0000-0000-000000000000 закодированный в BASE64>",
 "<персональный идентификатор админа владельца удостоверяемого сервера>",
 "<JSON данные сервера в строковом виде>",
 "<уровень удостоверения - от -127 до 127>"]

JSON данные сервера:

{
  "host": "<host сервера>",
  "trans_public_key": "<публичный транспортный ключ удостоверяемого сервера в Base64>"
}

Документ-анонс новых пакетов

{
  "host": "<host сервера-источника пакетов>",
  "admin_personal_id": "<персональный идентификатор админа - владельца сервера источника>",
  "ids": ["<id пакета 1>", "<id пакета 2>", ...],
  "sign": "<подпись данных host+'#'+join(',', ids) транспортным ключем сервера источника Base64>",
  "sign_public_key_id": "<идентификатор публичного транспортного ключа сервера Base64>"
}

Формат возврата данных пакета по его ID

{
 "status": 200,
 "packet": <данные пакета>
}
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты