Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Задача - Корневой сертификат удостоверяющего центра AD-CA на Linux
Условие1. поднять PKI-AD, при этом корневой центр сертификации должен быть установлен на отдельной станции ROOT-CA.
Условие2. так как станция ROOT-CA используется крайне ограниченные время и только на выпуск CRT и CRL, то на 99% станция находится отключенном состоянии, бюджет на данную станцию равен нулю.
Размышления
Размышления крайне просты: для экономии бюджета PKI-AD будет установлена непосредственно на сервер Active Decretory, а вот ROOT-CA требуется поднять на Linux.
Далее по тексту:
ROOT-CA – станция либо сертификат корневого центра.
PKI AD-CA – станция с ролью “Службы сертификатов Active Decretory”
Решение
Подготовка 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 с описанием
собираем файл vars, у меня получилось так:
# A little housekeeping: DON'T EDIT THIS SECTION (ну нет так нет)
# Easy-RSA 3.x doesn't source into the environment directly.
if [ -z "$EASYRSA_CALLER" ]; then
echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2
echo "This is no longer necessary and is disallowed. See the section called" >&2
echo "'How to use this file' near the top comments for more details." >&2
return 1
fi
# пути
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 4096
set_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 в ROOT-ca.crt, так как-то удобнее. Теперь нужно подготовить службу Центра сертификации Windows.
Устанавливаем роль “Службы сертификатов Active Decretory”
После установки переходим к настройке - Службы сертификатов Active Decretory
Более детально с настройкой и установкой можно ознакомится на 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 Decretory и можем начать выпуск сертификатов для пользователей, станций, серверов. При этом ROOT-ca находится на станции с Linux, и нам не пришлось отдавать под данную задачу отдельный сервер с Windows.