Puncte:1

CA Recovery în Active Directory

drapel in

Cred că înțeleg, dar vreau să fiu sigur.

Executăm două controlere de domeniu Windows 2016 (VM), dintre care unul îndeplinește rolul de server de certificate. Efectuăm zilnic backup-uri ale stării sistemului și le descarcăm într-o locație la distanță. Dacă, din orice motiv, controlerul de domeniu cu CA trebuie reconstruit complet, presupun că pot face o restaurare neautoritară folosind cea mai recentă copie de rezervă a stării sistemului pentru a recupera CA, iar controlerul de domeniu existent va actualiza serverul reconstruit cu toate celelalte informații AD. Este aceasta o presupunere corectă sau ar trebui să implementez un plan de recuperare specific CA?

Informatii suplimentare: Lucrez la o bază de referință pentru un sistem implementat în peste 50 de medii deconectate. Adăugarea unui alt server la fiecare site nu este o opțiune pentru mine în acest moment. Intenționez să implementez atât starea sistemului, cât și un plan de backup specific CA pentru a ajuta la recuperare, iată câteva scripturi pe care le-am eliminat împreună pentru a ajuta la verificările manuale și procesele zilnice automatizate.

#CA Inițial / Actualizare Script de backup
$filedate = (Get-Date -format d).ToString().Replace(â/â,â-â)

#Backup / verificare backup
IF ((Calea de testare D:\CAbackup) -eq $False)
    {
    mkdir D:\CABackup
    mkdir D:\CABackup\InitialBackup
    Backup-CARoleService -KeyOnly D:\CABackup\InitialBackup -Parola (read-host -Prompt „Atribuiți o parolă pentru cheia privată CA” -AsSecureString)
    Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
    reg export HKLM\System\CurrentControlSet\Services\CertSvc\Configuration D:\CABackup\InitialBackUp\<nume fișier>.reg
    }
 ELSEIF ((Calea de testare D:\CABackup\InitialBackup) -eq $False)
    {
    mkdir D:\CABackup\InitialBackup
    Backup-CARoleService -KeyOnly D:\CABackup\InitialBackup -Parola (read-host -Prompt „Atribuiți o parolă pentru cheia privată CA” -AsSecureString)
    Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
    reg export HKLM\System\CurrentControlSet\Services\CertSvc\Configuration D:\CABackup\InitialBackUp\<nume fișier>.reg
    }
ELSE {
    IF ((Calea de testare D:\CABackup\InitialBackup\database\<nume fișier>.edb) -eq $false)
        {
        Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
        }
    ELSE {}
    IF ((Calea de testare D:\CABackup\InitialBackup\<nume fișier>.reg) -eq $false)
        {
        reg export HKLM\System\CurrentControlSet\Services\CertSvc\Configuration D:\CABackup\InitialBackUp\<nume fișier>.reg
        }
    ELSE {}
    IF ((Calea de testare D:\CABackup\InitialBackup\<nume fișier>.p12) -eq $false)
        {
        Backup-CARoleService -KeyOnly D:\CABackup\InitialBackup -Parola (read-host -Prompt „Atribuiți o parolă pentru cheia privată CA” -AsSecureString)
        }
    ALTE
        {
        #Comparați amprenta certificatului de rezervă cu amprenta certificatului CA, dacă nu se potrivesc, arhivați certificatul vechi și faceți o copie de rezervă a celui actual
        $catpret = certutil -adca | Select-String "Cert Hash"
        $catp = $certret.Line.Substring(17)
        $archtp = (Get-PfxData -FilePath d:\cabackup\Prikey\<nume fișier>.p12).EndEntityCertificates.Thumbprint
        IF ($catp -ne $archtp)
            {
            mv d:\cabackup\prikey\<nume fișier>.p12 d:\cabackup\prikey\<nume fișier>.p12.$date fișier
            Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
            }
        ELSE {}
        }
    }

#Lista certificatelor care vor expira în următoarele 120 de zile
$list=@()
$na =(get-date).addDays(120)
$listofexp = certutil -view -restrict "NotAfter<=$na" -out "RequestID,RequesterName,Request Common Name,NotAfter"
$total = ($listofexp.count -10)
$f=10
$e=13
În timp ce ($e -lt $total)
    {
    $listof += ($listofexp[$f] + $listofexp[$f+1] + $listofexp[$f+2] + $listofexp[$e])
    $f = $f+6
    $e = $e+6
    } 


#Copie de rezervă zilnică
$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\<nume fișier>.reg

#Ștergeți cererile de certificare de 2 săptămâni și mai vechi
$list=@()
$setpurge = (get-date).AddDays(-14)
$purgedate = Get-date $setpurge -Format „LL/zz/aa”
$listofpend = certutil -view -restrict „Data trimiterii cererii<=$purgedate,Request Disposition=9” -out „ID cererii, data trimiterii cererii, nume comun al cererii”
$total = ($listofpend.count -9)
$f=9
$e=11
În timp ce ($e -lt $total)
{
$list += ($listofpend[$f] -inlocuire '.*\(' -inlocuire '\),*')
$f = $f+5
$e = $e+5
}
foreach ($articol din $listă)
{
certutil -deleterow $item
}

<#Procesul de purjare original înlocuit cu mai sus
$setpurge = (get-date).AddDays(-14)
    $purgedate = Get-date $setpurge -Format „LL/zz/aa”
    certutil -deleterow $purgedate cerere
#>

Am testat cele mai multe dintre acestea într-un laborator și las zilnic să ruleze un pic înainte de a șterge un server sau două și de a încerca restaurarea. Daca are cineva vreun sfat suplimentar ar fi foarte apreciat.

Puncte:2
drapel cn

Acesta este unul dintre motivele pentru care este foarte recomandat nu face au un CA care rulează pe un controler de domeniu. Am unul pe un DC într-un domeniu moștenit chiar acum și este un coșmar de întreținere și va fi eliminat atunci când o altă dependență de serviciu este rezolvată. Serverele DC și CA sunt extrem de critice, desigur, și dacă o funcție eșuează în timp ce cealaltă este în regulă, o face mult mai complexă de tratat.

Recomand cu căldură să implementați un plan de întreținere separat pentru a face backup la baza de date CA printr-o sarcină programată. Acest plan de întreținere ar trebui să includă și procese (certutil sau PKPSI Powershell) pentru a șterge în mod regulat cererile de certificate vechi respinse sau în așteptare plus certificatele expirate. Nu numai că vă va ajuta dacă doriți să migrați sau să recuperați CA în altă parte, ar trebui să faceți o copie de rezervă regulată, ca orice bază de date, pentru a curăța jurnalele de tranzacții și a vă asigura că totul este comis.

Pentru a începe unul, faceți o copie de rezervă completă a CA - inclusiv cheia CA - într-un director de pe un volum local care nu are o bază de date CA pe el.Apelați directorul ceva de genul CABackup, apoi creați un director copil care spune ceva de genul „Copie de rezervă inițială”. Țintește-ți primul backup acolo. Cheia privată CA ar trebui arhivată undeva în siguranță, cu o înregistrare a parolei folosite pentru a o salva. Exportați, de asemenea, cheia de registry HKLM:\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\[CAName] în folderul de rezervă.

Pentru întreținere regulată, avem un script care creează un nou folder de rezervă sub folderul părinte „CABackup” de fiecare dată când rulează - directorul trebuie să fie gol pentru fiecare copie de rezervă. Face backup numai pentru baza de date CA. Desigur, directorul de backup CA și conținutul acestuia sunt arhivate pe bandă cu restul copiei de rezervă obișnuite ale sistemului de fișiere. Același script efectuează, de asemenea, curățarea REQ-urilor învechite și a certificatelor expirate dacă backup-ul local are succes.

Ar trebui să aveți un proces pentru a șterge copiile de siguranță vechi - păstrăm ultimele 5 disponibile - dar nu ștergeți folderul Backup inițial. Desigur, dacă schimbați cheia CA dintr-un anumit motiv, faceți o nouă copie de rezervă inițială atât a cheii DB, cât și a cheii CA.

În domeniul în care un CA și un DC coexistă, în cazul în care întregul domeniu ar avea nevoie de recuperare, nu aș folosi DC-ul care găzduiește CA ca țintă de recuperare. Orice DC alternativ ar fi de preferat. Dacă domeniul real este sănătos, dar ceva a fost în neregulă cu ADDS pe serverul partajat, pur și simplu aș elimina ADDS și aș construi un alt DC.

Dacă CA necesită recuperare, dar nu și DC, aș profita de ocazie pentru a migra CA. Cheia de regulă exportată ajută la accelerarea procesului, dar asigurați-vă că configurați instanța CA recuperată cu noul FQDN al serverului din Registry. Acest procedura de migrare a unui CA descrie procesul. De asemenea, în mod firesc, testați procesul de recuperare a CA într-un mediu izolat.

Ar putea fi perfect recuperarea atât DC, cât și CA cu o recuperare a stării sistemului, dar, pentru a fi sincer, unul sau altul este suficient de stresant de la sine.Am făcut-o doar o singură dată în zilele de demult într-un mediu cu un singur server DC/CA/fișier „totul”.

Recomand totuși să vă mutați CA cât mai curând posibil, înainte de a contracta mult mai multe „datorii tehnice”. Poate coexista cu alte roluri mai puțin critice, cum ar fi un server KMS sau WSUS, dacă aveți constrângeri privind numărul de sisteme pe care le puteți avea. Dacă nu sunteți constrâns, ar trebui să faceți o rădăcină offline pe două niveluri plus o configurare CA intermediară. Articolul despre migrare legat de mai sus merită citit chiar și doar pentru informațiile dvs. - o migrare de bază nu este un proces foarte dificil.

De asemenea, ceea ce ar trebui să faceți cu siguranță, dacă vă păstrați configurația curentă (pentru o perioadă) este să încercați cât mai curând posibil o recuperare a stării sistemului într-un mediu izolat, inclusiv adăugarea a cel puțin unui nou DC la domeniul recuperat și asigurarea că CA poate emite certificate pentru tipul de clienți pe care îi are în prezent. Acest lucru ar trebui să ajute la clarificarea eventualelor puncte dureroase.

Rnet avatar
drapel in
Apreciez ideea că a fost de mare ajutor, am adăugat câteva informații la întrebarea mea inițială.
LeeM avatar
drapel cn
Implementați peste 50 de reclame deconectate? Asta pare o mulțime de cap.În orice caz, scriptul arată ok, deși recomand să faceți un `certutil -view -restrict` pentru a obține REQ-uri vechi și certificate expirate și apoi să faceți un `certutil -deleterow RowID` pe rezultate. `certutil -deleterow Request` etc se pot bloca cu ușurință odată ce DB crește. De asemenea, recomand cu căldură să instalați PSPKI pentru a face toate aceste lucruri prin powershell, mai degrabă decât să apelați la `certutil`. Acest articol (ambele pagini) este bun pentru informații și un exemplu de script dacă nu l-ați văzut: https://www.pkisolutions.com/adcsbackups/
Rnet avatar
drapel in
Da, 50 de reclame deconectate, este o sarcină încântătoare. Am actualizat scripturile pentru a utiliza procesul descris mai sus. Voi face un proces de curățare pentru copiile de rezervă, deoarece nu vreau să întâmpin o problemă de stocare. Mulțumesc pentru link, fac un pic mai mult de cercetare cu privire la procesul de întreținere CA și pot folosi PSPKI, deoarece pare să ușureze viața, mai ales din partea automatizării.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.