ldap314ki

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 24, 2025 License: Apache-2.0

README

ldap314ki

Go Report Card CodeQL

Как это работает

  1. Подключаемся к AD по протоколу LDAP (в моём случае это MS AD и ldap) с учётными данными указанными в конфигурации

  2. Выполняем поиск объектов согласно фильтру указанному в конфигурации

  3. Получаем для них атрибуты "dn", "cn", "uid", "mail", "givenName", "sn", "displayName", "sAMAccountName"

  4. Для каждого найденного объекта выполняем процедуру создания пользовательского сертификата и ключа

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

4.2 Выполняем создание пользовательского сертификата со следующими условиями * имя файла - каталог + sAMAccountName + ".crt" || ".key" * размер ключа - согласно конфигурационному файлу * CommonName - из атрибута cn найденого пользователя * Emails - из атрибута mail найденноо пользователя * срок действия - согласно конфигурационному файлу * OrganizationalUnit - из поля Subhect.CommonName родительского сертификата * Organization, Country, Locality, Province, StreetAddress, PostalCode, CommonName - из соответствующих значений поля Subject родительского сертификата (Subject.Organization и т.п.) * Использование ключа - Цифровая подпись, Шифрование ключей, Шифрование данных * DNS-имена - из атрибута DNSNames родительского сертификата * CA - нет

4.3 Сохраняем созданные сертификаты назначив права 400 (только чтение владельцу)

4.4 выполняем верификацию и проверку подписи пользовательского сертификата

Установка, конфигурация и запуск

  1. Собранные бинарные файлы можно загрузить из раздела Releases

  2. Заполнить config-файл указав данные подключения, фильтр поиска и пути до сертификатов

  3. Запустить приложение

  4. Ознакомиться с выводом

Параметры приложения

--config - "./config-local.yml" - путь до конфгурационного файла, если не задан - ./config.yml.

Содержимое конфигурационного файла приложения (config.yml)

debug - true || false - включает/выключает режим отладки приложения (с выключенным режимом отладки сообщения с уровнем debug не пишутся в лог)

url- "ldap://127.0.0.1:38938" - строка подключения к домену по ldap, указывается протокол (ldap, ldaps), адрес, порт.

baseDn - "dc=demo,dc=lab" - используется при подключении к домену

ldapUsername - "ldapuser" - пользователь для подключения и выполнения запросов по ldap

ldapPassword - "qwe123Q" - пароль для подключения и выполнения запросов по ldap

ldapFilter - "(objectClass=person)" - фильтр, который будет испольван для поиска пользователей, например, поиск по sAMAccountname выглядит как (sAMAccountName=adevi), поддерживаются условия и конкатенации. Итоговый запрос должен быть представлен в виде строки

caCertPath - "./ca_cert.crt" - путь до сертификата промежуточного центра сертификации на основе которого будут выпускаться пользовательские сертификаты

caKeyPath - "./ca_key.key" - путь до ключа сертификата промежуточного центра сертификации на основе которого будут выпускаться пользовательские сертификаты

caPassword - "Passw0rd" - пароль для сертификата промежуточного центра сертификации на основе которого будут выпускаться пользовательские сертификаты

certValidityDays - 30 - значение в днях (int) для действия создаваемых пользовательских сертификатов

certKeySize - 2048 - размер ключа шифрования (int) для создаваемыз пользовательских сертификатов

userCertSaveToPath - "./" - путь куда будут сохранены созданные пользовательские сертификаты. Если сам путь доступен, но, папка отсутствует - будет создана. Если папка уже создана - сертификаты будут добавлены в неё.

Полный пример содержимого config.yml

debug: true
url: "ldap://127.0.0.1:38938"
baseDn: "dc=demo,dc=lab"
ldapUsername: "ldapuser"
ldapPassword: "ldapPASSW0RD"
ldapFilter: "(objectClass=person)"
caCertPath: "./ca_cert.pem"
caKeyPath: "./ca_key.pem"
caPassword: "CApassword"
certValidityDays: 30
certKeySize: 2048
userCertSaveToPath: "./"

Установка для разработки

  1. Убедитесь, что установлена подходящая версия Go - 1.25.

  2. Запустите make команду для установки утилит разработки.

make setup
Make команды

См. содерржимое Makefile

Структура проекта

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

ldap314ki/
├── cmd/
│   └── app/
│       └── main.go              // Точка входа для запуска приложения
├── internal/                      // Вся логика приложения
│      ├── app/                     // Инициализация приложения, сигналы на завершение, чтение конфига и сам запуск
│      ├── config/                // Хранение конфигураций для всех частей проекта
│      ├── transport/          // Сетевое взаимодействие
│      │     ├── ldap/            // Взаимодействие с доменом по ldap
│      ├── certs/                  // Логика генерации пользовательских сертификатов

TODO v0.2

  • тесты
  • читать родительский сертификат единожды если найден хотя бы 1 объект пользователя

Мне почему-то это нужно, но, нужно сделать доработки, чтобы было хорошо

Приложение это одна из частей практической (лабораторной или как там её) работы в рамках моего обучения в ВУЗе, поэтому, даже я сам не пробовал использовать его в сценариях близким к "боевым". Если Вы видите какое-то применение этому и я могу Вам чем-то помочь у нас есть 2 пути: A. Заведите ISSUE прямо тут в Github - я постараюсь Вам помочь и мне будет приятно, что это пригодилось кому-то ещё. Вариант с ISSUE самый удобный, вдруг, нас будет не 2, а целых 3 человека - тогда 3й увидит, что уже что-то делается. Б. Вы не хотите заводить ISSUE и хотите понадеяться, что спам-фильтры почты пропустят сообщение - напишите мне по контактным данным указанным в моём профиле

Directories

Path Synopsis
cmd
app command
internal
app

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL