xca-automatic-update-crl
— это проект, который автоматизирует процесс обновления списка отозванных сертификатов (CRL) для инфраструктуры PKI (Public Key Infrastructure), созданной с помощью XCA (X Certificate and Key management). Проект состоит из двух основных компонентов:
- Сервер (ЦУЦ): Центральный узел управления (ЦУЦ) отвечает за регистрацию клиентов (ПУЦ), предоставление актуального CRL и мониторинг состояния подключенных клиентов.
- Клиент (ПУЦ): Периферийный узел управления (ПУЦ) регистрируется на сервере, периодически запрашивает CRL и отображает статус отозванных сертификатов.
Проект предоставляет веб-интерфейс для мониторинга:
- Список подключенных клиентов (ПУЦ) с их статусом (Connected/Disconnected).
- Список отозванных сертификатов с серийными номерами, причинами отзыва и датами отзыва.
Этот проект полезен для автоматизации управления сертификатами в распределённых системах, где требуется регулярное обновление CRL и мониторинг состояния инфраструктуры PKI.
Проект решает следующие задачи:
- Автоматическое обновление CRL: Клиенты (ПУЦ) автоматически запрашивают и обновляют CRL с сервера (ЦУЦ) каждые 30 секунд.
- Мониторинг клиентов: Сервер отслеживает состояние подключенных ПУЦ (онлайн/оффлайн) и предоставляет информацию о последнем обновлении.
- Удобный интерфейс: Веб-интерфейс с вкладками для просмотра списка клиентов и отозванных сертификатов, выполненный в едином стиле для сервера и клиента.
- Безопасность: Использует подписи для регистрации клиентов и проверки целостности CRL.
Проект может быть использован в корпоративных сетях, где требуется управление сертификатами и их отзывами, например, для VPN, веб-серверов или других систем, использующих PKI.
Для работы проекта необходимы следующие зависимости:
- Python 3.8+
- Библиотеки Python:
fastapi
— для создания веб-сервера.uvicorn
— для запуска FastAPI.cryptography
— для работы с сертификатами и подписями.aiohttp
— для асинхронных HTTP-запросов.aiofiles
— для асинхронной работы с файлами.
- XCA (опционально): Для создания сертификатов, ключей и CRL.
- Сертификаты и ключи:
- Сертификат и приватный ключ для ЦУЦ.
- Сертификат и приватный ключ для каждого ПУЦ.
- Файл CRL (например,
CRL.pem
), созданный в XCA.
Склонируй репозиторий на свой компьютер:
git clone https://github.com/Tminww/xca-automatic-update-crl.git
cd xca-automatic-update-crl
Создай виртуальное окружение и установи зависимости:
python -m venv venv
source venv/bin/activate # Для Windows: venv\Scripts\activate
pip install -r requirements.txt
Если файл requirements.txt
отсутствует, установи зависимости вручную:
pip install fastapi uvicorn requests cryptography aiohttp aiofiles
Создай файл .env
для ЦУЦ и ПУЦ используя .env.default
за основу. Пример:
ROOT_HOST=127.0.0.1
ROOT_PORT=8000
PUC_HOST=127.0.0.5
PUC_PORT=8001
PUC_USER=user1
PROXY=http://proxy.example.com:3128
ABSOLUTE_PUC_CERT_PATH=/path/to/UNDERCA1.crt
ABSOLUTE_PUC_KEY_PATH=/path/to/UNDERCA1.pem
ABSOLUTE_CRL_PATH=/path/to/CRL.pem
UPDATE_RATE=30
Укажи правильные пути к файлам сертификатов, ключей и CRL, а также хосты и порты для сервера и клиента.
- Используй XCA для создания:
- Сертификата и ключа для ЦУЦ.
- Сертификата и ключа для ПУЦ.
- Файла CRL (
CRL.pem
).
- Укажи пути к этим файлам в
.env
.
Запусти сервер на указанном хосте и порту:
python3 -m main
- Сервер начнёт работать и будет доступен по адресу
http://127.0.0.1:8000/
. - Он будет отслеживать подключенных клиентов и предоставлять CRL.
Запусти клиент на другом порту:
python3 -m main
- Клиент зарегистрируется на сервере и начнёт периодически запрашивать CRL.
- Веб-интерфейс клиента будет доступен по адресу
http://127.0.0.1:8001/
.
- Открой
http://127.0.0.1:8000/
в браузере. - Переключайся между вкладками:
- Список ПУЦ: Показывает зарегистрированных клиентов, их IP, порт, статус (Connected/Disconnected) и время последнего обновления.
- Отозванные сертификаты: Отображает список отозванных сертификатов с серийными номерами, причинами отзыва и датами отзыва.
- Открой
http://127.0.0.1:8001/
в браузере. - Просматривай:
- Статус соединения с сервером.
- Время последнего обновления CRL.
- Список отозванных сертификатов.
- Ошибка "File not found":
- Убедись, что пути к сертификатам, ключам и CRL в
.env
указаны правильно.
- Убедись, что пути к сертификатам, ключам и CRL в
- Клиент не регистрируется на сервере:
- Проверь, что сервер запущен и доступен по указанному хосту и порту.
- Убедись, что подпись клиента валидна (проверь сертификаты и ключи).
- CRL не обновляется:
- Проверь логи (
logs/root_server.log
иlogs/under_server.log
) на наличие ошибок. - Убедись, что файл
CRL.pem
доступен и валиден.
- Проверь логи (
Проект распространяется под лицензией MIT. Подробности смотри в файле LICENSE
.