ที่ Windows เก็บใบรับรองและคีย์ส่วนตัว

/th/images/view-physical-certificate-stores-in-windows.png

โดยทั่วไปสแน็ปอิน MMC แบบกราฟิกต่อไปนี้จะใช้ในการจัดการใบรับรองใน Windows: certlm.msc (ใบรับรอง Local Machine), certmgr.msc (ใบรับรองผู้ใช้) และยูทิลิตีบรรทัดคำสั่ง certutil เครื่องมือทั้งหมดนี้โต้ตอบกับร้านค้าใบรับรองแบบลอจิคัล ซึ่งจะสรุปตำแหน่งทางกายภาพของคีย์ใบรับรองสาธารณะและส่วนตัวบนดิสก์และในรีจิสทรีจากผู้ใช้และแอป

ตำแหน่งร้านค้าใบรับรองแบบลอจิคัลและฟิสิคัลใน Windows

คีย์สาธารณะและคีย์ส่วนตัวของใบรับรองใน Windows จะไม่ถูกจัดเก็บไว้ในที่ส่วนกลางเดียวกัน คีย์สาธารณะของใบรับรองจะถูกจัดเก็บไว้ในรีจิสทรี (สามารถแยกออกมาได้) แต่คีย์ส่วนตัว (ถ้ามี) จะถูกจัดเก็บไว้ในระบบไฟล์และได้รับการเข้ารหัส

ตามค่าเริ่มต้น Windows Certificate Manager ( certmgr.msc ) จะแสดงเฉพาะมุมมองลอจิคัลของที่เก็บใบรับรอง หากต้องการดูที่เก็บใบรับรองทางกายภาพในคอนโซล ให้เลือก View-> Options จากเมนูและเปิดใช้งานการจัดเก็บใบรับรองทางกายภาพ คอนโซลจะแสดงคีย์ใบรับรองที่จัดกลุ่มตามตำแหน่งที่เก็บข้อมูลจริง (รีจิสทรี คอมพิวเตอร์ในเครื่อง สมาร์ทการ์ด ฯลฯ)

/th/images/view-physical-certificate-stores-in-windows.png.webp

ใบรับรองในรีจิสทรี:

ร้านขายใบรับรอง |

รหัสรีจิสทรี |

คำอธิบาย—|—|— ผู้ใช้ |

HKCU\SOFTWARE\Microsoft\SystemCertificates |

คีย์สาธารณะของใบรับรองผู้ใช้

ผู้ใช้ |

HKCU\SOFTWARE\Policies\Microsoft\SystemCertificates |

คีย์สาธารณะของใบรับรองผู้ใช้ที่ใช้งานโดยใช้นโยบายกลุ่มโฆษณา

คอมพิวเตอร์ |

HKLM\SOFTWARE\Microsoft\SystemCertificates |

กุญแจสาธารณะใบรับรองเครื่อง

คอมพิวเตอร์ |

HKLM\SOFTWARE\Microsoft\วิทยาการเข้ารหัสลับ\บริการ |

กุญแจสาธารณะของบริการทั่วไป

คอมพิวเตอร์ |

HKLM\SOFTWARE\Policies\Microsoft\SystemCertificates |

กุญแจสาธารณะของใบรับรองเครื่องที่ติดตั้งผ่าน GPO

คอมพิวเตอร์ |

HKLM\SOFTWARE\Microsoft\EnterpriseCertificates |

คีย์สาธารณะของเครื่องได้รับการติดตั้งจาก CA องค์กรในโดเมน AD

คีย์ส่วนตัวของใบรับรองบนไดรฟ์ระบบ:

ผู้ใช้ |

%APPDATA%\Microsoft\SystemCertificates |

ไดเร็กทอรีนี้จัดเก็บคีย์สาธารณะของผู้ใช้และตัวชี้ไปยังคีย์ใบรับรองส่วนตัว—|—|—ผู้ใช้ |

%APPDATA%\Microsoft\Crypto |

คอนเทนเนอร์คีย์ส่วนตัวของผู้ใช้

คอมพิวเตอร์ |

%ProgramData%\Microsoft\Crypto |

คอนเทนเนอร์คีย์ส่วนตัวของเครื่อง

การเข้ารหัส DPAPI สิ่งนี้ทำให้มั่นใจได้ว่าเฉพาะเจ้าของบัญชีที่รู้รหัสผ่านเท่านั้นที่สามารถถอดรหัสคีย์ส่วนตัวได้ สิ่งนี้จะปกป้องคีย์ส่วนตัวหากถูกโจมตี

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

เช่นเดียวกับวิธีที่คุณเข้าถึงออบเจ็กต์บนระบบไฟล์ คุณสามารถเข้าถึงที่เก็บใบรับรองลอจิคัลจาก PowerShell ได้โดยใช้ผู้ให้บริการ Cert ในตัว

ตัวอย่างเช่น นี่คือคำสั่ง PowerShell ที่ใช้นำทางไปยังที่เก็บใบรับรองของคอมพิวเตอร์

cd ใบรับรอง:\LocalMachine\my

แสดงรายการใบรับรองในร้านค้า LocalMachine:

รับไอเทม *

/th/images/powershell-list-localmachine-my-certificates.png.webp

หรือคุณสามารถใช้คำสั่ง certutil เพื่อแสดงรายการใบรับรองของเครื่อง:

ใบรับรองร้านค้า MY

กำลังแยกใบรับรองออกจาก Windows Registry

ใบรับรองจะถูกเก็บไว้ภายใต้คีย์รีจิสทรี HKEY\_LOCAL\_MACHINE\SOFTWARE\Microsoft\SystemCertificates\MY สามารถระบุได้ด้วยรหัสประจำตัวในชื่อคีย์รีจิสทรี ข้อมูลสำหรับใบรับรองแต่ละรายการจะถูกจัดเก็บไว้ในค่าไบนารี BLOB ซึ่งมีใบรับรองแบบเต็มในรูปแบบที่เข้ารหัส DER

/th/images/certificates-thumbprints-in-the-registry.png.webp

ใช้สคริปต์ PowerShell นี้เพื่อแยกข้อมูลใบรับรอง BLOB จากรีจิสทรีตามรหัสประจำตัว จากนั้น แปลงข้อมูลเป็นรูปแบบ X509Certificate2 และพิมพ์ข้อมูลใบรับรอง:

` $regPath=“HKLM:\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates\D9DA2EDD7CBC0EFBF476276672DEBFD56870AAF8”$blob=(Get-ItemProperty-Path $regPath).Blob

$cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2-ArgumentList (, $blob)

$ใบรับรอง | รูปแบบ-รายการหัวเรื่อง, ผู้ออก, NotBefore, NotAfter, Thumbprint `

/th/images/powershell-extract-x509-certificate-info-from-th.png.webp

หากต้องการส่งออกใบรับรองคีย์สาธารณะนี้เป็นไฟล์ CER (สำหรับถ่ายโอนไปยังคอมพิวเตอร์เครื่องอื่น) ให้รันคำสั่งต่อไปนี้:

` $certBytes=$cert.Export(System.Security.Cryptography.X509Certificates.X509ContentType::Cert)

System.IO.File::WriteAllBytes(“c:\temp\exported_certificate.cer”, $certBytes) `

/th/images/export-certificate-key-from-a-registry-to-cer-file.png.webp

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

ใช้สคริปต์ RecoverOfflineCertificate เพื่อส่งออกคีย์ส่วนตัวจากคอมพิวเตอร์ออฟไลน์

*️⃣ ลิงค์ที่มา:

ใบรับรองที่ใช้งานโดยใช้นโยบายกลุ่ม AD, , รีเซ็ตรหัสผ่านผู้ดูแลระบบท้องถิ่น, , RecoverOfflineCertificate ,