Skip to content

igroykt/caapi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CAApi

Microsoft Certificate Authority библиотека для Python. Пригодится, если надо поднять PKI на Linux завязанный под Центр сертификации Windows Server (например для массовой выдачи неквалифицированных электронных подписей).

Зависимости

  • Python 3.x
  • Paramiko
  • OpenSSH
  • OpenSSL

Настройка пользователя

Логинимся на Windows сервер под пользователем с правами администратора домена (он же будет использоваться для ssh). Запускаем certmgr.msc и выполняем "Запросить новый сертификат -> Политика регистрации Active Directory -> Агент регистрации". Запускаем оснастку "Центр сертификации" и выполняем "Создать -> Выдаваемый шаблон сертификата" и добавляем шаблоны "Компьютер" и "Агент регистрации".

Настройка шаблона

В оснастке "Центр сертификации" выполняем "Шаблоны сертификации -> Управление". Создаем копию шаблона "Агент регистрации". Далее по скриншотам:

Общие

Совместимость

Безопасность

Обработка

Шифрование

Субъект

Выдача

В остальных вкладках все оставляем по-умолчанию.

Настройка групповых политик

В оснастке "Управление групповой политикой" создаем отдельную политику (на всякий кейс) для автоматической регистрации сертификатов и настраиваем как на скринах:

Конфигурация компьютера

Конфигурация компьютера

Конфигурация пользователя

Конфигурация пользователя

Настройка SSH

Говорят сейчас Windows Server по-умолчанию идет с ssh. Но если у вас обновленный сервер, то он вряд ли есть. Я ставил с репозитория chocolatey. Генерируем ключ на Linux сервере:

ssh-keygen -t rsa
cat /path/to/id_rsa.pub

Открытый ключ прописываем на Windows Server по пути %programdata%\ssh\administrators_authorized_keys. Проверяем подключение:

ssh administrator@winserv_ip 'whoami'

Инициализация

from caapi import CAApi

cas = CAApi(winserv_ip, admin_login, remote_temp_dir, local_certs_dir, ca_name, cert_template, backward_compat=False)

Если версия SSH сервера на Windows Server ниже 8, а версия клиента 8 или выше, то backward_compat надо установить в True.

Пример

cert_template = "1.3.6.1.4.1.311.21.8.5651447.1341949.11750026.13543132.4387299.20.5585599.1234567"
cas = CAApi(
    "192.168.0.9",
    "administrator",
    "c:\\temp", #директория для временных файлов
    "./certs", #локальная директория хранения сертификатов
    "CONTOSO\\dc-CONTOSO-CA-1",
    cert_template,
    backward_compat=False
)
cas.generate_config("Vasya Pupkin", "[email protected]", "[email protected]", "CONTOSO")
cas.generate_cert("[email protected]", "123", "administrator")
cas.revoke_cert("[email protected]", "123", "3")

OID шаблона можно узнать в PowerShell:

Get-CATemplate

Методы

  • generate_config(user_fullname, user_principalname, user_mail, user_domain) bool -> генерирует конфигурацию для запроса сертификата пользователя
  • generate_cert(user_principalname, cert_pass, cep_cert) bool -> генерирует сертификат пользователя
  • revoke_cert(user_principalname, cert_pass, reason) bool -> отзывает сертификат пользователя

В generate_cert в параметре cep_cert есть ремарка. Обычно в качестве значения передается имя пользователя для которого выписан CEP сертификат (обычно это administrator). Но если у вас несколько CEP сертификатов, то certreq выдаст ошибку и попросит нажать кнопку "ОК" из-за чего все зависает. Потому если у вас более одного сертификата, то вместо имени пользователя лучше использовать серийный номер сертификата.

Название ЦС (ca_name) можно увидеть в оснастке "Центр сертификации".

Название домена (user_domain) можно узнать командой "echo %USERDOMAIN%".

Название сертификата CEP обычно совпадает с именем пользователя, которому оно было выдано (см. "настройка пользователя").

Коды отзывов

Код Причина
0 Не указано (по-умолчанию). Не рекомендуется использовать из-за сложностей в будущем при аудите.
1 Ключ сертификата скомпромитирован. Следует использовать при утечке ключей сертификатов или их паролей.
2 Центр сертификации скомпрометирован. Следует использовать, если центр сертификации был взломан.
3 Изменение принадлежности. Следует использовать, если пользователь был уволен.
4 Заменено. Используется, если пользователь забыл пароль, сломал смарт-карту или изменил имя.
5 Прекращение работы. Используется для отзыва сертификата ЦС, когда ЦС прекращает свою работу и больше не будет использоваться.
6 Временный отзыв. Это значит, что ЦС не будет распозновать сертификат на время отзыва. Сертификат может быть возвращен к использованию (кодом 8).
8 Удаление из списка отзыва. Возврат сертификата к использованию при этом сертификат все еще будет в списке отозованных, но с кодом 8.

About

Microsoft Certificate Authority library for Python

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages