среда, 3 июня 2020 г.

django3-pki

Когда-то на работе понадобилось поднять свой собственный центр сертификации для управления сертификатами для серверов и для клиентов VPN серверов и прочих сервисов.
Т.к. у нас использовался Django в качестве фреймворка для нашей системы управления компьютерами в сети, то я стал искать приложения к Django.
Едиственный нормально проработанный вариант это был django-pki
Это был проект Джанго с встроенным приложением центра сертификации.
Это была версия 1.2 и  тогда не разрабатывали приложения отлельно от самого фреймворками.

Я сделал форк этого проекта и переписал проект с поддержкой Django1.8
Там появилось много удобного и в коде питона и в разметке в шаблонах.

Но вот сейчас опять, теперь уже на другой работе, пришлось создать свой центр сертификации. И я опять вернулся к этому проекту.
Дело в том что до сих пор я не нашел приложний к Django с таким функционалом. Все остальные приложения выглядят очень просто и мало функциональны.

В этот раз я переписал код под Django3 и оформил это в виде отдельного приложения, которое можно установить через pip и потом просто добавить его в INSTALLED_APPS в settings.py

И да! конечно код был переписан на python. Нужно отметить что теперь требования к коду намного более строгие чем тогда когда писались первые версии этого приложения. Это я про то что настроена проверка кода разными валидаторами кода типа flake8, black и isort.

Конечно код будет исполняться как бы он там не был написан, но читать и разбираться теперь значительно легче.

Нужно сказать что автор первоначальной версии проделал огромную работу и прописал много всего тогда когда архитекрура джанго не позволяло все упростить. Думаю, что многое можно упростить теперь , но до этого руки еще не дошли.

Теперь про само приложение.
Само приложение представляет собой обертку над библиотекой openssl.
В настройках приложения есть переменная :

PKI_OPENSSL_BIN = getattr(settings, "PKI_OPENSSL_BIN", "/usr/bin/openssl")

Здесь Вы можете указать путь к openssl в вашей системе.

Само приложение управляется через админку Django.

Когда вы нажимаете "Refresh Metadata" на странице приложения создается папка PKI в папке приложения, хотя Вы конечно можете указать и свой путь к папке сертификатов в вашей системе.

Основная конфигурация центра сертификации описана в шаблоне

/templates/pki/openssl.conf.in
На базе этого файла в папке PKI создается openssl.conf

Все сертификаты и корневые и для серверов и для клиентов будут находиться именно в папке PKI

Любые операции по изменению или удалению сделанные в веб интерфейсе будут актуализироваться тут же в папке PKI

В приложении реализовано логгирование всех действий с сертификатами и их можно посмотреть на странице приложения.

Будьте осторожней когда работаете непосредственно с файлами сертификатами. Если файл изменен или удален, приложение ничего об этом не узнает и данные в базе данных будут не актуальны.

Так же в этом приложении добавлена возможность формировать конфиг для клиентов ВПН серверов.

Шаблон для формирования таких конфигов лежит тут:

/pki/templates/ovpn.tpl

При формировании конфига в него будут добавлены сертификат клиента , ключ клиента и корневой сертификат центра.


Адреса ВПН сервером придется добавить в конфиг руками.

В первых версиях этого приложения была сделана связка со встроенными моделями пользователей. В каком-то смысле это удобно - можно получить все данные о пользователе.

Но сейчас возникли некоторые особенности с новых версиях Django.
Дело в том, что разные приложения теперь можно располагать в разных базах данных  (для этого в новых версиях Django есть dbRouter). А вот связать модели из разных баз через конструкции
ForeignKey уже не возможно..
Поэтому теперь в приложении в модели хранится только имя пользователя.
Искать такого пользователя придется вручную.


В общем пользуйтесь! и пишите замечания и предложения.

https://pypi.org/project/django3-pki/

https://github.com/yaricp/django3-pki




Комментариев нет:

Отправить комментарий