TrustNetServer
Материал из Сервис Облачной Демократии
(Различия между версиями)
Админ (обсуждение | вклад) (→Формат возврата данных пакета по его ID) |
Админ (обсуждение | вклад) (→Дополнительное удостоверение для подписания админа и сервера) |
||
Строка 32: | Строка 32: | ||
"<UUID 00000000-0000-0000-0000-000000000000 закодированный в BASE64>", | "<UUID 00000000-0000-0000-0000-000000000000 закодированный в BASE64>", | ||
"<персональный идентификатор админа владельца удостоверяемого сервера>", | "<персональный идентификатор админа владельца удостоверяемого сервера>", | ||
− | "< | + | "<JSON данные сервера в строковом виде>", |
"<уровень удостоверения - от -127 до 127>"] | "<уровень удостоверения - от -127 до 127>"] | ||
+ | |||
+ | JSON данные сервера: | ||
+ | |||
+ | { | ||
+ | "host": "<host сервера>", | ||
+ | "trans_public_key": "<публичный транспортный ключ удостоверяемого сервера в Base64>" | ||
+ | } | ||
==== Документ-анонс новых пакетов ==== | ==== Документ-анонс новых пакетов ==== |
Версия 11:00, 16 июля 2015
Содержание |
Общий порядок взаимодействия серверов сети доверия между собой
По мере накопления новых пакетов на исходном сервере, периодически производится их рассылка на связанные сервера.
- В цикле по всем серверам назначения:
- Исходный сервер анализирует path во всех новых пакетов и выбирает только те пакеты, в которых в path отсутствует данный сервер назначения;
- Данные отобранных пакетов помещаются в оперативный кэш если их там еще нет;
- Формируется документ - анонс новых пакетов для сервера назначения;
- Документ-анонс новых пакетов подписывается транспортным ключем сервера;
- Документ-анонс отправляется на сервер назначения на URL http://<адрес сервера>/s2s/new_packets
Сервер назначения, после получения анонса новых пакетов с другого сервера делает следующее:
- Производит проверку допуска данного сервера для передачи данных:
- Определяет исходящий сервер;
- Ищет в сети доверия удостоверение админа сервера источника и публичного транспортного ключа сервера-источника;
- Проверяет что удостоверение админа, включающее публичный транспортный ключ данного сервера источника подписаны админом данного сервера назначения;
- Проверяет подпись документа-анонса транспортным ключем сервера источника;
- Проверяет наличие идентификаторов присланных пакетов в локальной базе сервера назначения;
- Для всех пакетов, которые отсутствуют в базе:
- Ставится блокировка на добавление данного пакета (что-бы избежать параллельного добавления одного пакета);
- С сервера источника по пути http://<адрес сервера источника>/s2s/get_packet?<id пакета> запрашивается содержимое пакета;
- Пакет добавляется в локальную базу;
- Отменяется блокировка на добавление данного пакета;
Формат используемых для межсерверного общения данных
Дополнительное удостоверение для подписания админа и сервера
["<персональный идентификатор админа-удостоверителя>", "<текущее время 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
{ "id": "<идентификатор пакета в виде sha512 хэша его данных в BASE64 без переноса строк>", "path": "<путь прохождения пакета по серверам в виде <host> через запятую>", "packet": <данные пакета в стандартном виде (как при взаимодействии с клиентом)> }