Рейтинг:1

Восстановление ЦС в Active Directory

флаг in

Кажется, я понимаю, но я хочу быть уверен.

Мы используем два контроллера домена (ВМ) Windows 2016, один из которых выполняет роль сервера сертификатов. Мы ежедневно делаем резервные копии состояния системы и выгружаем их в удаленное место. Если по какой-либо причине контроллер домена с ЦС необходимо полностью перестроить, я предполагаю, что могу выполнить неавторизованное восстановление, используя самую последнюю резервную копию состояния системы, чтобы восстановить ЦС, а существующий контроллер домена обновит восстановленный сервер с помощью вся остальная информация AD. Это правильное предположение или мне следует реализовать план восстановления для конкретного ЦС?

Дополнительная информация: Я работаю над базовым планом для системы, развернутой в более чем 50 автономных средах. На данный момент добавление еще одного сервера к каждому сайту для меня не вариант. Я планирую внедрить как состояние системы, так и план резервного копирования для ЦС, чтобы помочь в восстановлении, вот несколько сценариев, которые я собрал вместе, чтобы помочь в ручных проверках и автоматизированных ежедневных процессах.

#CA Сценарий исходного/обновленного резервного копирования
$filedate = (Get-Date -format d).ToString().Replace(â/â,â-â)

#Резервное копирование / проверка резервной копии
ЕСЛИ ((Тестовый путь D:\CAbackup) -eq $False)
    {
    mkdir D:\CABackup
    mkdir D:\CABackup\InitialBackup
    Backup-CARoleService -KeyOnly D:\CABackup\InitialBackup -Password (read-host -Prompt «Назначить пароль для закрытого ключа ЦС» -AsSecureString)
    Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
    reg export HKLM\System\CurrentControlSet\Services\CertSvc\Configuration D:\CABackup\InitialBackUp\<filename>.reg
    }
 ELSEIF ((Test-Path D:\CABackup\InitialBackup) -eq $False)
    {
    mkdir D:\CABackup\InitialBackup
    Backup-CARoleService -KeyOnly D:\CABackup\InitialBackup -Password (read-host -Prompt «Назначить пароль для закрытого ключа ЦС» -AsSecureString)
    Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
    reg export HKLM\System\CurrentControlSet\Services\CertSvc\Configuration D:\CABackup\InitialBackUp\<filename>.reg
    }
ЕЩЕ {
    IF ((Test-Path D:\CABackup\InitialBackup\database\<filename>.edb) -eq $false)
        {
        Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
        }
    ЕЩЕ {}
    IF ((Test-Path D:\CABackup\InitialBackup\<filename>.reg) -eq $false)
        {
        reg export HKLM\System\CurrentControlSet\Services\CertSvc\Configuration D:\CABackup\InitialBackUp\<filename>.reg
        }
    ЕЩЕ {}
    IF ((Test-Path D:\CABackup\InitialBackup\<filename>.p12) -eq $false)
        {
        Backup-CARoleService -KeyOnly D:\CABackup\InitialBackup -Password (read-host -Prompt «Назначить пароль для закрытого ключа ЦС» -AsSecureString)
        }
    ЕЩЕ
        {
        # Сравните резервную копию отпечатка сертификата с отпечатком сертификата ЦС, если они не совпадают, заархивируйте старый сертификат и создайте резервную копию текущего
        $catpret = certutil -adca | Select-String "Cert Hash"
        $catp = $certret.Line.Substring(17)
        $archtp = (Get-PfxData -FilePath d:\cabackup\Prikey\<filename>.p12).EndEntityCertificates.Thumbprint
        ЕСЛИ ($catp -ne $archtp)
            {
            mv d:\cabackup\prikey\<имя файла>.p12 d:\cabackup\prikey\<имя файла>.p12.$filedate
            Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
            }
        ЕЩЕ {}
        }
    }

#Список сертификатов, срок действия которых истечет в ближайшие 120 дней
$список=@()
$na =(дата получения).addDays(120)
$listofexp = certutil -view -restrict "NotAfter<=$na" -out "RequestID, RequesterName, Request Common Name, NotAfter"
Всего $ = ($listofexp.count -10)
$ф=10
$е=13
Пока ($e -lt $total)
    {
    $list += ($listofexp[$f] + $listofexp[$f+1] + $listofexp[$f+2] + $listofexp[$e])
    $f = $f+6
    $е = $е+6
    } 


#Ежедневное резервное копирование
$filedate = (Get-Date -format d).ToString().Replace(â/â,â-â)
mkdir D:\CABackup\$filedate
Backup-CARoleService -DatabaseOnly D:\CABackup\$filedate
reg export HKLM\System\CurrentControlSet\Services\CertSvc\Configuration D:\CABackup\$fildate\<filename>.reg

# Очистить 2-недельные и более ранние запросы сертификатов
$список=@()
$setpurge = (дата получения).AddDays(-14)
$purgedate = Get-date $setpurge -Format "ММ/дд/гг"
$listofpend = certutil -view -restrict "Дата отправки запроса<=$purgedate,Расположение запроса=9" -out "Идентификатор запроса, Дата отправки запроса, Общее имя запроса"
Всего $ = ($listofpend.count -9)
$f=9
$е=11
Пока ($e -lt $total)
{
$list += ($listofpend[$f] -заменить '.*\(' -заменить '\),*')
$f = $f+5
$е = $е+5
}
foreach ($элемент в списке $)
{
certutil -deleterow $item
}

<#Исходный процесс очистки заменен указанным выше
$setpurge = (дата получения).AddDays(-14)
    $purgedate = Get-date $setpurge -Format "ММ/дд/гг"
    certutil -deleterow $purgedate запрос
#>

Я протестировал большую часть этого в лаборатории и позволил ежедневным заданиям немного поработать, прежде чем удалить сервер или два и попытаться восстановить. Если у кого-то есть дополнительные советы, мы будем очень признательны.

Рейтинг:2
флаг cn

Это одна из причин, почему настоятельно рекомендуется не делайте иметь CA, работающий на контроллере домена. У меня есть один на контроллере домена в устаревшем домене прямо сейчас, и это кошмар с точки зрения обслуживания, и он будет удален, когда будет устранена зависимость от другой службы. Конечно, контроллеры домена и серверы ЦС очень важны, и если одна функция дает сбой, а другая в порядке, это значительно усложняет работу.

Я настоятельно рекомендую реализовать отдельный план обслуживания для резервного копирования вашей базы данных ЦС с помощью запланированного задания. Этот план обслуживания также должен включать процессы (certutil или PKPSI Powershell) для регулярного удаления старых отклоненных или ожидающих запросов сертификатов, а также сертификатов с истекшим сроком действия. Это не только поможет, если вы хотите перенести или восстановить ЦС в другом месте, вы должны регулярно делать резервную копию, как и любую базу данных, чтобы очистить журналы транзакций и убедиться, что все зафиксировано.

Чтобы начать работу, сделайте полную резервную копию ЦС, включая ключ ЦС, в каталог на локальном томе, на котором нет базы данных ЦС.Назовите каталог как-то вроде CABackup, затем создайте дочерний каталог, который говорит что-то вроде «Первоначальное резервное копирование». Направьте свою первую резервную копию туда. Закрытый ключ ЦС должен быть заархивирован в безопасном месте с записью пароля, использованного для его сохранения. Также экспортируйте раздел реестра HKLM:\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\[CANName] в вашу резервную папку.

Для регулярного обслуживания у нас есть сценарий, который создает новую папку резервных копий в родительской папке «CABackup» при каждом запуске — каталог должен быть пустым для каждой резервной копии. Он создает резервную копию только базы данных ЦС. Естественно, каталог резервной копии ЦС и его содержимое архивируются на ленту вместе с остальной частью обычной резервной копии файловой системы. Тот же сценарий также выполняет очистку устаревших REQ и сертификатов с истекшим сроком действия, если локальное резервное копирование выполнено успешно.

У вас должен быть процесс удаления старых резервных копий — мы оставляем последние 5 доступных — но не удаляйте папку Initial Backup. Конечно, если вы по какой-то причине измените ключ ЦС, сделайте новое начальное резервное копирование как БД, так и ключа ЦС.

В домене, где ЦС и ЦС сосуществуют, в случае, если весь домен нуждается в восстановлении, я бы не стал использовать ЦС, на котором размещается ЦС, в качестве цели восстановления. Любой альтернативный DC был бы предпочтительнее. Если реальный домен исправен, но что-то не так с ADDS на общем сервере, я бы просто удалил ADDS и построил другой контроллер домена.

Если бы центру сертификации требовалось восстановление, а не контроллеру домена, я бы воспользовался возможностью перенести центр сертификации. Экспортированный регистрационный ключ помогает ускорить процесс, но убедитесь, что вы настроили восстановленный экземпляр ЦС с новым полным доменным именем сервера в реестре. Этот Процедура миграции ЦС описывает процесс. Также, естественно, протестируйте процесс восстановления ЦС в изолированной среде.

Может быть совершенно нормально восстанавливать и DC, и CA с восстановлением состояния системы, но, честно говоря, одно или другое из них само по себе достаточно напряжно.Я сделал это сам только один раз в очень давние дни в среде с одним «всем» DC/CA/файловым сервером.

Тем не менее, я рекомендую перенести ваш центр сертификации как можно скорее, прежде чем вы понесете гораздо больший «технический долг». Он может сосуществовать с некоторыми другими менее важными ролями, такими как сервер KMS или WSUS, если у вас есть ограничения на количество систем, которые вы можете иметь. Если вы не ограничены, вам следует выполнить двухуровневую автономную настройку корневого каталога и промежуточного ЦС. Статью о миграции, указанную выше, стоит прочитать даже просто для информации — базовая миграция — не очень сложный процесс.

Кроме того, если вы сохраните текущую конфигурацию (на какое-то время), вам обязательно следует как можно скорее попытаться восстановить состояние системы в изолированной среде, включая добавление хотя бы одного нового контроллера домена в восстановленный домен и обеспечение того, чтобы ЦС мог выдает сертификаты тем клиентам, которым он занимается в настоящее время. Это должно помочь прояснить любые потенциальные болевые точки.

Rnet avatar
флаг in
Я ценю понимание, которое было очень полезным, я добавил дополнительную информацию к своему первоначальному вопросу.
LeeM avatar
флаг cn
Вы развертываете более 50 автономных объявлений? Это похоже на большие накладные расходы.В любом случае, сценарий выглядит нормально, хотя я рекомендую выполнить `certutil -view -restrict`, чтобы получить старые REQ и сертификаты с истекшим сроком действия, а затем выполнить `certutil -deleterow RowID` для результатов. `certutil -deleterow Request` и т. д. может легко остановиться, когда БД разрастется. Я также настоятельно рекомендую установить PSPKI для выполнения всего этого через powershell, а не вызывать `certutil`. Эта статья (обе страницы) хороша для понимания и примера сценария, если вы его еще не видели: https://www.pkisolutions.com/adcsbackups/
Rnet avatar
флаг in
Да, 50 отключенных AD, это восхитительная задача. Я обновил сценарии, чтобы использовать описанный выше процесс. Я собираюсь сделать процесс очистки резервных копий, так как не хочу столкнуться с проблемой хранения. Спасибо за ссылку, я немного больше изучаю процесс обслуживания ЦС и, возможно, использую PSPKI, так как это, кажется, намного упрощает жизнь, особенно со стороны автоматизации.

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

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.