Score:1

การกู้คืน CA ใน Active Directory

ธง in

ฉันคิดว่าฉันเข้าใจ แต่ฉันอยากแน่ใจ

เรากำลังเรียกใช้ตัวควบคุมโดเมน (VMs) ของ Windows 2016 สองตัว ซึ่งหนึ่งในนั้นทำหน้าที่เป็นเซิร์ฟเวอร์ใบรับรอง เราทำการสำรองข้อมูลสถานะระบบทุกวันและถ่ายโอนไปยังสถานที่ห่างไกล ไม่ว่าด้วยเหตุผลใดก็ตาม หากจำเป็นต้องสร้างตัวควบคุมโดเมนที่มี CA ใหม่ทั้งหมด ฉันถือว่าฉันสามารถทำการกู้คืนที่ไม่ได้รับอนุญาตโดยใช้การสำรองข้อมูลสถานะระบบล่าสุดเพื่อกู้คืน CA และตัวควบคุมโดเมนที่มีอยู่จะอัปเดตเซิร์ฟเวอร์ที่สร้างใหม่ด้วย ข้อมูลโฆษณาอื่น ๆ ทั้งหมด นี่เป็นสมมติฐานที่ถูกต้องหรือฉันควรใช้แผนการกู้คืนเฉพาะของ CA

ข้อมูลเพิ่มเติม: ฉันกำลังทำงานบนพื้นฐานสำหรับระบบที่ใช้งานในสภาพแวดล้อมที่ขาดการเชื่อมต่อมากกว่า 50 แห่ง การเพิ่มเซิร์ฟเวอร์อื่นในแต่ละไซต์ไม่ใช่ตัวเลือกสำหรับฉันในตอนนี้ ฉันวางแผนที่จะใช้ทั้งสถานะระบบและแผนสำรองข้อมูลเฉพาะของ CA เพื่อช่วยในการกู้คืน ต่อไปนี้เป็นสคริปต์บางส่วนที่ฉันรวบรวมไว้เพื่อช่วยในการตรวจสอบด้วยตนเองและกระบวนการรายวันแบบอัตโนมัติ

#CA เริ่มต้น / อัปเดตสคริปต์สำรองข้อมูล
$filedate = (Get-Date -format d).ToString().Replace(â/â,â-â)

#สำรองข้อมูล / ตรวจสอบข้อมูลสำรอง
IF ((ทดสอบเส้นทาง D:\CAbackup) -eq $False)
    {
    mkdir D:\CAสำรองข้อมูล
    mkdir D:\CABackup\InitialBackup
    Backup-CARoleService -KeyOnly D:\CABackup\InitialBackup -Password (read-host -Prompt "กำหนดรหัสผ่านสำหรับ CA Private Key" -AsSecureString)
    Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
    reg ส่งออก HKLM\System\CurrentControlSet\Services\CertSvc\Configuration D:\CABackup\InitialBackUp\<ชื่อไฟล์>.reg
    }
 ELSEIF ((ทดสอบเส้นทาง D:\CABackup\InitialBackup) -eq $False)
    {
    mkdir D:\CABackup\InitialBackup
    Backup-CARoleService -KeyOnly D:\CABackup\InitialBackup -Password (read-host -Prompt "กำหนดรหัสผ่านสำหรับ CA Private Key" -AsSecureString)
    Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
    reg ส่งออก HKLM\System\CurrentControlSet\Services\CertSvc\Configuration D:\CABackup\InitialBackUp\<ชื่อไฟล์>.reg
    }
อื่น {
    IF ((ทดสอบเส้นทาง D:\CABackup\InitialBackup\database\<ชื่อไฟล์>.edb) -eq $false)
        {
        Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
        }
    อื่น {}
    IF ((ทดสอบเส้นทาง D:\CABackup\InitialBackup\<ชื่อไฟล์>.reg) -eq $false)
        {
        reg ส่งออก HKLM\System\CurrentControlSet\Services\CertSvc\Configuration D:\CABackup\InitialBackUp\<ชื่อไฟล์>.reg
        }
    อื่น {}
    IF ((ทดสอบเส้นทาง D:\CABackup\InitialBackup\<ชื่อไฟล์>.p12) -eq $false)
        {
        Backup-CARoleService -KeyOnly D:\CABackup\InitialBackup -Password (read-host -Prompt "กำหนดรหัสผ่านสำหรับ CA Private Key" -AsSecureString)
        }
    อื่น
        {
        #เปรียบเทียบรหัสประจำตัวของใบรับรองที่สำรองไว้กับรหัสประจำตัวของใบรับรอง CA หากไม่ตรงกัน ให้เก็บถาวรใบรับรองเก่าและสำรองข้อมูลปัจจุบัน
        $catpret = ใบรับรอง -adca | เลือกสตริง "Cert Hash"
        $catp = $certret.Line.Substring(17)
        $archtp = (รับ PfxData -FilePath d:\cabackup\Prikey\<ชื่อไฟล์>.p12).EndEntityCertificates.Thumbprint
        IF ($catp -ne $archtp)
            {
            mv d:\cabackup\prikey\<ชื่อไฟล์>.p12 d:\cabackup\prikey\<ชื่อไฟล์>.p12.$filedate
            Backup-CARoleService -DatabaseOnly D:\CABackup\InitialBackup
            }
        อื่น {}
        }
    }

#รายชื่อใบรับรองที่จะหมดอายุในอีก 120 วันข้างหน้า
$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
ในขณะที่ ($e -lt $total)
    {
    $list += ($listofexp[$f] + $listofexp[$f+1] + $listofexp[$f+2] + $listofexp[$e])
    $f = $f+6
    $e = $e+6
    } 


#สำรองข้อมูลรายวัน
$filedate = (Get-Date -format d).ToString().Replace(â/â,â-â)
mkdir D:\CABackup\$filedate
Backup-CARoleService -DatabaseOnly D:\CABackup\$filedate
reg ส่งออก HKLM\System\CurrentControlSet\Services\CertSvc\Configuration D:\CABackup\$fildate\<ชื่อไฟล์>.reg

#ล้างคำขอใบรับรอง 2 สัปดาห์ขึ้นไป
$list=@()
$setpurge = (รับวันที่) เพิ่มวัน (-14)
$purgedate = รับวันที่ $setpurge - รูปแบบ "ดด/ว/ปป"
$listofpend = certutil -view -restrict "วันที่ส่งคำขอ<=$purgedate,การจัดการคำขอ=9" -ออก "รหัสคำขอ วันที่ส่งคำขอ ชื่อสามัญของคำขอ"
$total = ($listofpend.count -9)
$f=9
$e=11
ในขณะที่ ($e -lt $total)
{
$list += ($listofpend[$f] -replace '.*\(' -replace '\),*')
$f = $f+5
$e = $e+5
}
foreach ($item ใน $list)
{
ใบรับรอง - ลบรายการ $
}

<#กระบวนการล้างเดิมถูกแทนที่ด้วยด้านบน
$setpurge = (รับวันที่) เพิ่มวัน (-14)
    $purgedate = รับวันที่ $setpurge - รูปแบบ "ดด/ว/ปป"
    certutil - คำขอลบ $purgedate
#>

ฉันได้ทดสอบสิ่งนี้ส่วนใหญ่ในห้องแล็บและกำลังปล่อยให้รายวันทำงานสักครู่ก่อนที่ฉันจะลบเซิร์ฟเวอร์หนึ่งหรือสองเซิร์ฟเวอร์และพยายามกู้คืน ถ้าใครมีคำแนะนำเพิ่มเติมก็ยินดีเป็นอย่างยิ่ง

Score:2
ธง cn

นี่เป็นหนึ่งในเหตุผลที่ขอแนะนำให้คุณ อย่า มี CA ที่ทำงานบนตัวควบคุมโดเมน ฉันมีหนึ่งใน DC ในโดเมนเดิม และมันเป็นฝันร้ายของการบำรุงรักษา และจะถูกลบออกเมื่อมีการแยกการขึ้นต่อกันของบริการอื่น เซิร์ฟเวอร์ DC และ CA นั้นมีความสำคัญอย่างมาก และแน่นอนว่าหากคุณมีฟังก์ชันหนึ่งล้มเหลวในขณะที่อีกฟังก์ชันหนึ่งปกติดี ก็จะทำให้การจัดการมีความซับซ้อนมากขึ้น

ฉันขอแนะนำให้ใช้แผนการบำรุงรักษาแยกต่างหากเพื่อสำรองฐานข้อมูล CA ของคุณผ่านงานตามกำหนดเวลา แผนการบำรุงรักษานี้ควรรวมถึงกระบวนการ (certutil หรือ PKPSI Powershell) เพื่อลบคำขอใบรับรองเก่าที่ถูกปฏิเสธหรือรอดำเนินการเป็นประจำ รวมถึงใบรับรองที่หมดอายุ ไม่เพียงแต่จะช่วยในกรณีที่คุณต้องการย้ายข้อมูลหรือกู้คืน CA จากที่อื่น คุณควรทำการสำรองข้อมูลเป็นประจำ เช่น ฐานข้อมูลใดๆ เพื่อล้างบันทึกธุรกรรมและตรวจสอบให้แน่ใจว่าทุกอย่างถูกคอมมิต

หากต้องการดำเนินการต่อ ให้สำรองข้อมูลทั้งหมดของ CA - รวมถึงคีย์ CA - ไปยังไดเร็กทอรีบนไดรฟ์ข้อมูลในเครื่องที่ไม่มีฐานข้อมูล CAเรียกไดเร็กทอรีบางอย่างเช่น CABackup จากนั้นสร้างไดเร็กทอรีย่อยที่ระบุว่า "Initial Backup" กำหนดเป้าหมายการสำรองข้อมูลครั้งแรกของคุณที่นั่น ควรเก็บคีย์ส่วนตัวของ CA ไว้ในที่ที่ปลอดภัยโดยมีบันทึกรหัสผ่านที่ใช้บันทึก ส่งออกคีย์รีจิสทรีด้วย HKLM:\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\[CAName] ไปยังโฟลเดอร์สำรองของคุณ

สำหรับการบำรุงรักษาตามปกติ เรามีสคริปต์ที่สร้างโฟลเดอร์สำรองข้อมูลใหม่ภายใต้โฟลเดอร์พาเรนต์ "CABackup" ทุกครั้งที่เรียกใช้ - ไดเร็กทอรีจะต้องว่างเปล่าสำหรับข้อมูลสำรองแต่ละรายการ จะสำรองฐานข้อมูล CA เท่านั้น โดยปกติแล้วไดเร็กทอรีสำรองข้อมูล CA และเนื้อหาจะถูกเก็บถาวรเป็นเทปพร้อมกับข้อมูลสำรองระบบไฟล์ปกติที่เหลือ สคริปต์เดียวกันยังดำเนินการล้างข้อมูล REQ ที่เก่าและใบรับรองที่หมดอายุ หากการสำรองข้อมูลในเครื่องสำเร็จ

คุณควรมีขั้นตอนการลบข้อมูลสำรองเก่า - เราเก็บ 5 รายการล่าสุดไว้ - แต่อย่าลบโฟลเดอร์ข้อมูลสำรองเริ่มต้นของคุณ แน่นอน หากคุณเปลี่ยนคีย์ CA ด้วยเหตุผลบางประการ ให้ทำการสำรองข้อมูลเริ่มต้นใหม่ทั้งคีย์ DB และ CA

ในโดเมนที่มี CA และ DC อยู่ร่วมกัน ในกรณีที่ทั้งโดเมนต้องการการกู้คืน ฉันจะไม่ใช้ DC ที่โฮสต์ CA เป็นเป้าหมายในการกู้คืน DC สำรองใด ๆ จะดีกว่า หากโดเมนจริงมีความสมบูรณ์ แต่มีบางอย่างผิดปกติกับ ADDS บนเซิร์ฟเวอร์ที่ใช้ร่วมกัน ฉันจะลบ ADDS และสร้าง DC ใหม่

หาก CA ต้องการการกู้คืน แต่ไม่ใช่ DC ฉันจะใช้โอกาสนี้ในการย้าย CA คีย์ reg ที่ส่งออกช่วยเร่งกระบวนการ แต่ให้แน่ใจว่าคุณกำหนดค่าอินสแตนซ์ CA ที่กู้คืนด้วย FQDN เซิร์ฟเวอร์ใหม่ใน Registry นี้ ขั้นตอนการโยกย้าย CA อธิบาย กระบวนการ. นอกจากนี้ ตามปกติแล้ว ให้ทดสอบกระบวนการกู้คืน CA ในสภาพแวดล้อมที่แยกจากกัน

การกู้คืนทั้ง DC และ CA ด้วยการกู้คืนสถานะระบบอาจทำได้ดีอย่างสมบูรณ์แบบ แต่ตามจริงแล้วหนึ่งในนั้นอาจสร้างความเครียดได้พอสมควรฉันเคยทำด้วยตัวเองเพียงครั้งเดียวเมื่อหลายวันก่อนในสภาพแวดล้อมที่มีเซิร์ฟเวอร์ DC/CA/ไฟล์ "ทุกอย่าง" เพียงเครื่องเดียว

ฉันขอแนะนำให้ย้าย CA ของคุณโดยเร็วที่สุด ก่อนที่คุณจะเกิด "หนี้ทางเทคนิค" มากกว่านี้ สามารถอยู่ร่วมกับบทบาทอื่นๆ ที่มีความสำคัญน้อยกว่า เช่น เซิร์ฟเวอร์ KMS หรือ WSUS หากคุณมีข้อจำกัดเกี่ยวกับจำนวนระบบที่คุณมีได้ หากคุณไม่มีข้อจำกัด คุณควรทำรูทออฟไลน์แบบสองชั้นพร้อมการตั้งค่า CA ระดับกลาง บทความการย้ายข้อมูลที่ลิงก์ไว้ด้านบนนั้นคุ้มค่าที่จะอ่านแม้เพียงเพื่อข้อมูลของคุณ - การย้ายข้อมูลขั้นพื้นฐานไม่ใช่กระบวนการที่ยากมาก

นอกจากนี้ สิ่งที่คุณควรทำอย่างแน่นอน หากคุณเก็บการกำหนดค่าปัจจุบันของคุณไว้ (ชั่วระยะเวลาหนึ่ง) โดยเร็วที่สุดเท่าที่จะเป็นไปได้ ให้ลองกู้คืนสถานะระบบในสภาพแวดล้อมแบบแยก รวมถึงการเพิ่ม DC ใหม่อย่างน้อยหนึ่งรายการไปยังโดเมนที่กู้คืน และตรวจสอบให้แน่ใจว่า CA สามารถ ออกใบรับรองให้กับลูกค้าที่ทำอยู่ในปัจจุบัน สิ่งนี้ควรช่วยชี้แจงจุดปวดที่อาจเกิดขึ้น

Rnet avatar
in flag
ฉันขอขอบคุณข้อมูลเชิงลึกที่เป็นประโยชน์มาก ฉันได้เพิ่มข้อมูลเพิ่มเติมในคำถามเริ่มต้นของฉันแล้ว
LeeM avatar
cn flag
คุณกำลังปรับใช้โฆษณาที่ไม่ได้เชื่อมต่อมากกว่า 50 รายการใช่หรือไม่ ดูเหมือนว่าจะมีค่าใช้จ่ายมากมายไม่ว่าในกรณีใด สคริปต์ดูดี แม้ว่าฉันแนะนำให้ทำ `certutil -view -restrict` เพื่อรับ REQ เก่าและใบรับรองที่หมดอายุแล้ว จากนั้นจึงทำ `certutil -deleterow RowID` กับผลลัพธ์ `certutil -deleterow Request` ฯลฯ สามารถหยุดได้อย่างง่ายดายเมื่อฐานข้อมูลเติบโตขึ้น ฉันขอแนะนำอย่างยิ่งให้ติดตั้ง PSPKI สำหรับการทำสิ่งเหล่านี้ผ่าน powershell แทนที่จะเรียก 'certutil' บทความนี้ (ทั้งสองหน้า) เหมาะสำหรับข้อมูลเชิงลึกและสคริปต์ตัวอย่างหากคุณยังไม่ได้ดู: https://www.pkisolutions.com/adcsbackups/
Rnet avatar
in flag
ใช่ โฆษณาที่ขาดการเชื่อมต่อ 50 รายการ เป็นงานที่น่ายินดี ฉันได้อัปเดตสคริปต์เพื่อใช้กระบวนการที่คุณอธิบายไว้ข้างต้น ฉันกำลังจะล้างข้อมูลสำรองเนื่องจากฉันไม่ต้องการพบปัญหาพื้นที่เก็บข้อมูล ขอบคุณสำหรับลิงค์ ฉันกำลังทำวิจัยเพิ่มเติมเล็กน้อยเกี่ยวกับกระบวนการบำรุงรักษา CA และอาจใช้ PSPKI เนื่องจากดูเหมือนว่าจะทำให้ชีวิตง่ายขึ้นมาก โดยเฉพาะจากด้านระบบอัตโนมัติ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา