gna_ca_server: Архитектура и Принципы Работы
gna_ca_server — это криптографическое ядро и "банк доверия" всей сети GhostNet. Он реализован как изолированный микросервис, единственная задача которого — управление жизненным циклом цифровых идентификаторов (сертификатов) и инвайт-токенов.
Принцип безопасности №1: Изоляция. Сервер
gna_ca_serverспроектирован так, чтобы никогда не быть доступным извне. Он слушает только локальный интерфейс (127.0.0.1:9100), и единственным его "клиентом" являетсяgna_lighthouse. Это радикально снижает поверхность атаки.
1. Философия и Роль в Экосистеме
В отличие от монолитных VPN-решений, GhostNet разделяет управление (Lighthouse) и доверие (CA).
- Lighthouse знает "где" и "когда": Он отслеживает онлайн-статус и реальные IP-адреса узлов.
- CA Server знает "кто" и "что может": Он определяет, является ли узел легитимным участником сети и какими правами он обладает.
Такое разделение позволяет gna_ca_server сосредоточиться исключительно на криптографических операциях, не отвлекаясь на сетевую логику (P2P, NAT, реле).
2. Основной Функционал
2.1. Управление Жизненным Циклом Сертификатов (PKI)
gna_ca_server реализует полноценную инфраструктуру публичных ключей (Public Key Infrastructure).
Выпуск Сертификатов (/sign)
Сервер умеет генерировать сертификаты для разных нужд, используя разные криптографические алгоритмы:
- Ed25519 (для VPN Агентов): Выбирается по умолчанию для агентов. Обеспечивает максимальную производительность и современный уровень безопасности для UDP-трафика.
- ECDSA P-256 (для HTTPS): Используется для веб-сервисов, например, для HTTPS-панели самого Lighthouse. Обеспечивает широкую совместимость с браузерами.
- Ролевая модель (OU): Права доступа встраиваются прямо в сертификат через поле
OrganizationalUnit(OU). Например,OU=Adminsдает право доступа к панели управления, аOU=Users— только к VPN. - SAN (Subject Alternative Name): Сертификаты содержат SAN-поля, что позволяет им быть валидными для конкретных IP-адресов или DNS-имен (
base.ghost), что является стандартом для TLS.
Верификация и Аутентификация (/verify)
Это самая частая операция. Когда агент отправляет Handshake на Lighthouse, тот проксирует запрос на верификацию в CA. Процесс многоступенчатый:
- Криптографическая проверка подписи:
gna_ca_serverиспользуетringиx509-parserдля проверки, чтоAgentReportдействительно был подписан приватным ключом, соответствующим публичному ключу в сертификате. - Проверка цепочки доверия: Сертификат агента проверяется на то, что он был подписан корневым ключом нашего CA (
ca_key.pem). - Проверка статуса отзыва (CRL): Сервер обращается к своей базе данных (
ca_database.db) и проверяет, не помечен ли серийный номер сертификата как отозванный (revoked = 1). - Проверка срока действия: Анализируются поля
not_beforeиnot_after.
Отзыв Сертификатов (/certificates/revoke/:serial)
При компрометации ключа администратор может мгновенно отозвать сертификат. Сервер помечает соответствующую запись в базе данных. gna_lighthouse периодически запрашивает обновленный список отозванных сертификатов (CRL) и прекращает обслуживать узлы с недействительными сертификатами.
2.2. Система Онбординга (Invites)
Чтобы избежать ручной генерации ключей и их передачи по незащищенным каналам, используется система одноразовых токенов.
- Создание (
/invite): Администратор запрашивает токен. CA генерируетUUID, сохраняет его в таблицуinvitesвместе с TTL (сроком жизни), назначенной ролью (group_name) и будущим VIP (assign_cn). - Погашение (
/join): Агент отправляет токен, свой временныйnode_idи Hardware Fingerprint. - Валидация и Выпуск: CA проверяет токен в базе, генерирует постоянную пару ключей и сертификат, а затем привязывает этот сертификат к
Hardware Fingerprintв таблицеcertificates. - Деактивация: Токен помечается как
is_used = 1и больше не может быть использован.
2.3. Anti-Theft: Привязка к Аппаратному Обеспечению (/verify_binding)
Это ключевая функция Zero Trust, которая защищает от кражи ключей.
- Принцип: Во время онбординга (на шаге 2.2),
hw_fingerprintагента сохраняется в базе данных вместе с егоnode_idиvirtual_ip. - Применение: При каждой попытке админского доступа к панели,
gna_lighthouseвызывает эндпоинт/verify_binding. CA сервер выполняет SQL-запрос:SELECT * FROM certificates WHERE node_id = ? AND hw_fingerprint = ? AND virtual_ip = ?. - Результат: Если злоумышленник скопирует
node.keyиcert.pemс вашего ноутбука на другую машину,hw_fingerprintне совпадет, и CA вернет отказ. Доступ будет заблокирован.
3. Техническая Реализация
-
API Сервер: Написан на
axum— современном веб-фреймворке для Rust, работающем поверхtokio. Вся логика асинхронна, что обеспечивает высокую производительность. -
База Данных: Используется
SQLiteчерез крейтrusqlite. Выбор обусловлен простотой развертывания (один файл, не требует отдельного сервера) и надежностью для однопользовательской записи. Схема данных:certificates: Реестр всех выданных сертификатов, их статус, сроки действия, и привязка кnode_idиhw_fingerprint.invites: Список одноразовых токенов, их сроки действия и статус.
-
Криптография: Используется набор проверенных библиотек:
rcgen: Для генерации ключей и сертификатов X.509.x509-parser: Для парсинга и анализа PEM/DER сертификатов.ring: Для высокопроизводительной криптографической верификации подписей Ed25519.
4. Запуск и Управление
4.1. Инициализация
Первый и единственный раз сервер запускается с флагом --init-ca.
sudo ./gna_ca_server --init-ca
Эта команда создает три артефакта в текущей папке: ca_cert.pem: Публичная часть корневого сертификата. Его можно безопасно распространять. ca_key.pem: Секретный ключ. Его компрометация = компрометация всей сети. ca_database.db: Файл базы данных SQLite. 4.2. Режимы Запуска gna_ca_server поддерживает два режима: Интерактивный (по умолчанию): Запускается командой sudo ./gna_ca_server. Отображает консольное меню для прямого администрирования базы данных и PKI. В этом режиме API-сервер также запускается в фоновом потоке. Служба (--headless): Запускается командой sudo ./gna_ca_server --headless. В этом режиме запускается только API-сервер без интерактивного меню. Идеально для работы под управлением systemd. 4.3. Консольное Меню (Интерактивный Режим) Меню предоставляет прямой доступ к основным операциям CA, что полезно для отладки или ручного управления.
=== GHOST-NET CA AUTHORITY v1.0 ===
Статус сервера: ONLINE (Port 9100)
Выберите действие:
- Список активных инвайтов
- Создать новый инвайт (CLI)
- Список выданных сертификатов
- Отозвать сертификат (Revoke)
- Полное удаление сертификата (Purge)
- Перегенерация Root CA (Опасно!)
- Установка службы (Systemd/Windows)
- Остановка/Запуск API
- Выход
- Пункты 1-5: Предоставляют CRUD-операции над таблицами
invitesиcertificates. - Пункт 6 (Перегенерация Root CA): КРАЙНЕ ОПАСНАЯ ОПЕРАЦИЯ. Полностью уничтожает старый корень доверия. Все ранее выданные сертификаты станут недействительными. Используйте только в случае компрометации
ca_key.pemили для полного сброса сети. - Пункт 7 (Установка службы): Создает и активирует
systemdсервис (ghost_ca.service), прописывая в него правильныйWorkingDirectoryи флаг--headless, что обеспечивает корректный запуск после перезагрузки сервера.
5. Полный список API Эндпоинтов
Сервер предоставляет RESTful API для gna_lighthouse.
| Метод | Эндпоинт | Описание |
|---|---|---|
POST | /sign | (Устаревшее) Ручной выпуск сертификата. |
POST | /verify | Ключевой: Проверка подписи и статуса сертификата. |
POST | /verify_binding | Ключевой: Проверка привязки к железу (Anti-Theft). |
GET | /root_ca | Получение публичного корневого сертификата. |
POST | /invite | Создание нового инвайт-токена. |
GET | /invites | Получение списка активных инвайтов. |
DELETE | /invites/:token | Удаление (отмена) инвайт-токена. |
POST | /join | Ключевой: Обмен токена на сертификат. |
GET | /crl | Получение списка отозванных сертификатов (CRL). |
GET | /certificates | Получение полного реестра сертификатов. |
POST | /certificates/revoke/:serial | Отзыв сертификата по серийному номеру. |
DELETE | /certificates/:serial | Полное удаление сертификата из базы. |
6. Экспериментальные Идеи и Будущее Развитие
Хотя текущая архитектура централизована вокруг одного CA, она закладывает основу для более сложных топологий.
-
Федерация и Промежуточные CA (Intermediate CAs): В будущем возможно создание нескольких CA для разных отделов или регионов. Корневой
gna_ca_serverмог бы подписывать промежуточные CA, которые, в свою очередь, выпускали бы сертификаты для своих агентов. Это позволило бы делегировать полномочия и строить более масштабные иерархии доверия. -
Автономная Работа Lighthouse: Если
gna_ca_serverвременно недоступен,gna_lighthouseможет продолжать работу, используя кэшированные данные о статусе отзыва. Он не сможет провести онбординг новых узлов, но уже подключенные агенты продолжат функционировать, так как их сертификаты уже выпущены. -
Аппаратные Модули Безопасности (HSM): Для максимальной безопасности, приватный ключ Root CA (
ca_key.pem) может храниться не на диске, а внутри аппаратного модуля (HSM) или YubiKey.gna_ca_serverбудет обращаться к устройству для выполнения операций подписи, ключ при этом никогда не покинет защищенное хранилище.
Текущая реализация gna_ca_server является прочным фундаментом, готовым к дальнейшему расширению и усилению безопасности.