Задача - Корневой сертификат удостоверяющего центра AD-CA на Linux
Условие1. поднять PKI-AD, при этом корневой центр
сертификации должен быть установлен на отдельной станции
ROOT-CA.
Условие2. так как станция ROOT-CA используется крайне
ограниченные время и только на выпуск CRT и CRL, то на 99% станция
находится отключенном состоянии, бюджет на данную станцию равен
нулю.
Размышления
Размышления крайне просты: для экономии бюджета PKI-AD будет установлена непосредственно на сервер Active Directory, а вот ROOT-CA требуется поднять на Linux.
Далее по тексту:
-
ROOT-CA станция либо сертификат корневого центра.
-
PKI AD-CA станция с ролью Службы сертификатов Active Directory
Решение
Подготовка ROOT-CA. (CentOS7)
Корневой сертификат ROOT-CA, будем выпускать на CentOS, там-же будем подписывать сертификат для PKI AD-CA.
Для решения данной задачи на машине с Linux необходимо установить пакет easy-rsa, который содержится в репетиторе epel-release
yum install epel-releas
yum install easy-rsa
Более подробно с документацией к easy-rsa можно ознакомится на GitHub/OpenVPN
После того как мы установили easy-rsa мы можем создать главный удостоверяющий центр сертификации.
(Все операции буду выполнять из под пользователя root)
Создадим в директории пользователя, каталог - в котором будем хранить наш PKI
mkdir -p ~/ROOTca
Далее нужно скопировать последнюю версию easy-rsa в наш каталог ROOTca,
dir /usr/share/easy-rsa/
В моём случаи последняя версия 3.0.8. Её и будем копировать.
Копируем easy-rsa в каталог ROOTca
cp -R /usr/share/easy-rsa/3.0.8/* ~/ROOTca
теперь нам необходимо создать файл ответов vars, и отредактировать его
создаем и сразу редактируем
cat > ~/ROOTca/vars
собираем файл vars, у меня получилось так:
# A little housekeeping: DON'T EDIT THIS SECTION (ну нет так нет)# Easy-RSA 3.x doesn't source into the environment directly.if [ -z "$EASYRSA_CALLER" ]; thenecho "You appear to be sourcing an Easy-RSA 'vars' file." >&2echo "This is no longer necessary and is disallowed. See the section called" >&2echo "'How to use this file' near the top comments for more details." >&2return 1fi# пути set_var EASYRSA "$PWD"set_var EASYRSA_PKI "$EASYRSA/pki"set_var EASYRSA_OPENSSL"openssl"set_var EASYRSA_DN "org"set_var EASYRSA_TEMP_FILE "$EASYRSA_PKI/extensions.temp"set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-easyrsa.cnf"set_var EASYRSA_BATCH ""# Заполняем данные организацииset_var EASYRSA_REQ_COUNTRY "RU"set_var EASYRSA_REQ_PROVINCE "Russia"set_var EASYRSA_REQ_CITY "Moscow"set_var EASYRSA_REQ_ORG "CompanyName"set_var EASYRSA_REQ_EMAIL "ca@companyname.ru"set_var EASYRSA_REQ_OU "CompanyName.ru" set_var EASYRSA_NS_SUPPORT "yes"set_var EASYRSA_NS_COMMENT "CompanyName Certificate 2021"# размер ключа сертификата и алгоритмset_var EASYRSA_KEY_SIZE 4096set_var EASYRSA_ALGO rsa# срок действия корневого сертификата в днях (20 лет) set_var EASYRSA_CA_EXPIRE 7300# Срок действия выпускаемых сертификатовset_var EASYRSA_CERT_EXPIRE 365# Время действия списка отзыва ~ кварталset_var EASYRSA_CRL_DAYS 92# выпускаемый сертификатset_var EASYRSA_DIGEST "sha256"
Теперь все готово, можно начинать!
Внимание! Вовремя всех действий, вы должны находится в директории ROOTca
cd ~/ROOTca
Инициализируем наш центр сертификации
./easyrsa init-pki
Отлично, мы готовы выпустить наш ROOT-CA
Выпускаем
./easyrsa build-ca
Система попросит придумать пароль для секретного ключа нашего ROOT-CA
(для наших задач, пароль должен быть не менее 4 символов)
Проверяем параметры выпускаемого сертификата, они берутся из vars, соглашаемся либо меняем на нужные.
!!! В какой-то момент система спросит название Common Name. Это название будет основным названиям нашего сертификата
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: Указываем CompanyName Certificate 2021.
По окончанию мы получим корневой сертификат ROOT-ca нашего PKI
Он располагается пути /root/ROOTca/pki/ca.crt
Копируем корневой сертификат на станцию c PKI AD-CA
Сервер с PKI AD-CA (Windows Server)
Проверяем полученный файл на станции PKI AD-CA
Открываем ca.crt и проверяем содержимое
ca.crtВсе отлично! Переименуем ca.crt в ROOT-ca.crt, так как-то удобнее. Теперь нужно подготовить службу Центра сертификации Windows.
Устанавливаем роль Службы сертификатов Active Directory
в моем случае, устанавливаю Службы сертификатов Active Directory на отдельный ПК, все действия для PKI AD-CA идентичныПосле установки переходим к настройке - Службы сертификатов Active Directory
Более детально с настройкой и установкой можно ознакомится на docs.microsoft.com
в момент настройки выбираем следующие опции:
-
ЦС - предприятия
-
Наш сервер будет- подчиненным ЦС
-
Нам нужно создать новый закрытый ключ
-
Шифрование - выбираем по вкусу
-
Указываем имя CA
-
Запрос сертификата - указываем через REQ файл
По окончанию настройки мы получаем следующее сообщение:
Хорошо, теперь у нас есть файл pki-ca_PKI-CA-CA.req
Копируем полученный файл на машину с Linux ROOT-ca в директорию /root/ROOTca/pki/
Все готово к выпуску сертификата для PKI AD-CA
Перед тем как выпустить сертификат нужно импортировать req файл в PKI
импортируем
./easyrsa import-req /root/ROOTca/pki/pki-ca_PKI-CA-CA.req
CompanyName-AD
Где CompanyName-AD название центра PKI AD-CA
Проверяем что получилось
./easyrsa show-req CompanyName-AD
Пора выпустить сертификат для CompanyName-AD
./easyrsa sign-req ca CompanyName-AD
Так как мы выпускаем сертификат для Центра сертификации указываем именно ca, если нужно выпустить на отдельный сервер указываем server.
мы получили наш сертификат для PKI AD-CA по пути /root/ROOTca/pki/issued/CompanyName-AD.crt
Копируем его на станцию с PKI AD-CA
Также нам нужны списки отзыва CRL, с генерируем и их
Получили /root/ROOTca/pki/crl.pem
(Напоминаю что действия наших списков 92 дня см файл vars,в течении 92 дней нужно повторить операцию передачи CRL)
Копируем crl.pem также на станцию с AD-PKI
Сервер с PKI AD-CA (Windows Server)
Сейчас у нас есть все, что нам нужно.
А именно:
-
Корневой сертификат: ROOT-ca.crt
-
Сертификат CA для нашего сервера: CompanyName-AD.crt
-
Списки отзыва: crl.pem
Импорт ROOT-ca
Нам нужно сделать ROOT-ca.crt стал валидным сертификатом в системе Windows, напоминаю, что сейчас он с крестом и нас, конечно, такой вариант не устраивает.
Запускам MMC-консоль и подключаем оснастку Сертификаты для учетной записи компьютера.
Переходим по пути: Сертификаты\Доверительные корневые центры\Сертификаты
Добавим наш сертификат ROOT-ca.crt в "Доверительные корневые центры"
Для этого правой кнопкой по папке сертифкаты -> импорт
Указываем путь к сертификату ROOT-ca.crt и импортируем его.
После импорта сертификат должен появиться в списке
Теперь, проверяем сам файл ROOT-ca.crt
Так-то куда лучше!
(Данный сертификат нужно также распространить через групповые политики, на все ПК в AD)
Импорт CRL.
Нам также нужно импортировать списки отзыва, для этого необходимо переименовать файл crl.pem в ROOTca.crl
(теперь можно изучить файл ROOTca.crl)
Импортируем его точно также как и сертификат в доверительные корневые центры ROOT-ca.crt
Активация PKI AD-CA
Теперь можно приступить к активации нашего CA PKI AD-CA
Запускаем средство "Центр сертификации"
Перед установкой сертификата в CA, лучше предварительно настроить публикацию CDP и AIA
Активируем CA
Правой кнопкой мыши по серверу PKI AD-CA > Все задачи > Установить сертификат ЦС
Далее, указываем файл CompanyName-AD.crt и подтверждаем.
Если мы все сделали правильно, установка сертификата в CA должна пройти без ошибок и предупреждений.
Если вы не можете импортировать CompanyName-AD.crt система просит P7B файл.
Необходимо выполнить слияние CompanyName-AD.crt с ROOT-ca.crt в OpenSSL следующей командой:
openssl crl2pkcs7 -nocrl certfile ROOT-ca.crt -certfile CompanyName-AD.crt -out CompanyName-AD.p7b
Запуск PKI AD-CA
теперь мы можем запустить службу Центра сертификации
Правой кнопкой мыши по серверу PKI AD-CA > Все задачи > Запуск службы
Итог
мы получили рабочий PKI - Active Directory и можем начать выпуск сертификатов для пользователей, станций, серверов. При этом ROOT-ca находится на станции с Linux, и нам не пришлось отдавать под данную задачу отдельный сервер с Windows.