ตัวอย่างการอัปเดตสะสมประจําเดือนพฤศจิกายน 2020 สําหรับ Windows 10 เวอร์ชัน 2004 และต่ํากว่า รวมถึงการเปิดตัวด้านความปลอดภัยและคุณภาพประจําเดือนมกราคม 2021 สําหรับ .NET Framework 4.8 ได้เผยแพร่การเปลี่ยนแปลงเพื่อปรับปรุงกระบวนการล้างข้อมูลสําหรับใบรับรอง X509Certificate2 ด้านล่างนี้ เราได้อธิบายเพิ่มเติมเกี่ยวกับอายุการใช้งานของคีย์ส่วนตัวบน Windows

ตั้งแต่.NET Framework 2.0 มีวิธีในการโหลดใบรับรองและคีย์ส่วนตัวที่เกี่ยวข้องสองวิธีจากไฟล์ PKCS#12 PFX: เป็นวัตถุใบรับรองหนึ่งรายการผ่านสมาชิกในคลาส X509Certificate2 หรือตามใบรับรองทั้งหมดที่มีอยู่ใน PFX ผ่านวิธี X509Certificate2Collection.Import

ลักษณะการทํางานเริ่มต้นคือคีย์ส่วนตัวถูกโหลดลงในคีย์แบบถาวร (มีชื่อ) ผ่านหนึ่งในไลบรารีการเข้ารหัสของระบบ ซึ่งเขียนไฟล์ลงในดิสก์โดยทางอ้อม  ผู้โทรส่วนใหญ่ที่โหลด PFX จะใช้วัตถุใบรับรองเป็นการชั่วคราวเท่านั้น ดังนั้นเมื่อ .NET ปล่อยทรัพยากรดั้งเดิมที่เชื่อมโยงกับใบรับรอง จะลบคีย์ส่วนตัวด้วย  ข้อยกเว้นหลักสําหรับลักษณะการทํางานนี้ได้แก่

  1. ค่าสถานะ X509KeyStorageFlags.PersistKeySet ซึ่งส่งผลให้ไฟล์ถูกเขียนแต่ไม่ถูกลบ

  2. ค่าสถานะ X509KeyStorageFlags.EphemeralKetSet ซึ่งส่งผลให้คีย์ส่วนตัวถูกโหลดไปยังหน่วยความจําโดยไม่มีไฟล์สํารอง

  3. การสิ้นสุดกระบวนการที่ผิดปกติ ซึ่งสามารถเกิดขึ้นได้เมื่อการลบคีย์ค้างอยู่

วิธีการโหลดใบรับรองที่แตกต่างกันสองวิธีมักจะใช้กลไกที่แตกต่างกันสําหรับการติดตามเมื่อถึงเวลาที่เหมาะสมในการลบคีย์ส่วนตัว  การโหลดใบรับรองเดียวผ่านคลาส X509Certificate2 จะใช้ตัวทําเครื่องหมายที่มองเห็นได้เฉพาะรันไทม์ .NET และนําไปใช้กับการอ้างอิงวัตถุเดียวเท่านั้น  การโหลด PFX ผ่าน X509Certificate2Collection.Import ใช้เครื่องหมายบนวัตถุใบรับรองดั้งเดิม ซึ่งส่งผลให้มีการแชร์ "ความสามารถในการรับผิดชอบการลบ" ระหว่างวัตถุที่มีการจัดการใดๆ ที่แสดงใบรับรองดั้งเดิมเดียวกัน  ซึ่งหมายความว่า X509Certificate2 ใหม่(otherCert.Handle) Dispose() จะทําให้ไฟล์คีย์ส่วนตัวถูกลบระหว่างการโทรเพื่อ Dispose() ถ้ามีการโหลด OtherCert จาก PFX ผ่าน X509Certificate2Collection.Import แต่ไม่ได้โหลดจาก PFX ผ่านสมาชิกคลาส X509Certificate2 ใดๆ  บางส่วนของ .NET ภายในจะสร้างวัตถุ X509Certificate2 ที่มีการจัดการใหม่จากตัวจัดการใบรับรองดั้งเดิม เช่น คลาส X509Chain และเมธอด X509Certificate2Collection.Find  ส่วนเหล่านี้ของเฟรมเวิร์ก และส่วนใดๆ ที่ใช้โดยตรงหรือโดยอ้อม อาจส่งผลให้เกิดการลบคีย์ก่อนเวลาอันควรเนื่องจากวัตถุที่พวกเขาสร้างถูกเก็บขยะ

มีการนําบักมาใช้ในการเผยแพร่ครั้งแรกของ .NET Framework 4.8 ซึ่งส่งผลให้ X509Certificate2Collection.Import ไม่ใช้ตัวทําเครื่องหมายการลบ แม้ว่าจะไม่ได้ระบุ PersistKeySet หรือ EphemeralKeySet ไว้ก็ตาม .NET เผยแพร่การแก้ไขข้อบกพร่องนี้ใน ชุดรวมอัปเดตความปลอดภัยและคุณภาพประจําเดือนมกราคม 2021 เพื่อป้องกันการสะสมไฟล์ส่วนตัวที่ถูกละทิ้งโดยไม่ได้ตั้งใจ  ผู้เรียกที่ได้รับผลกระทบจากการแก้ไขนี้สามารถระบุค่าสถานะ PersistKeySet เพื่อกลับไปยังลักษณะการทํางานของ RTM .NET Framework 4.8 RTM (โดยไม่ตั้งใจ) แต่การทําเช่นนั้นจะส่งผลให้เกิดการสะสมไฟล์ที่จําเป็นต้องแก้ไขด้วยตรรกะการล้างข้อมูลแบบกําหนดเอง

X509Certificate2Collection.Import บน .NET Core สําหรับ Windows และ .NET 5+ สําหรับ Windows ทํางานในลักษณะเดียวกับ.NET Framework 2.0-4.7.2 (และ.NET Framework 4.8 ที่มีการนําการอัปเดตทั้งหมดไปใช้)  ทีม .NET กําลังพิจารณาย้ายไปยังการออกแบบที่ได้รับการปรับปรุงใน .NET 6 (หรือเวอร์ชันในอนาคต) แต่การอัปเดตการออกแบบนี้จะไม่นําไปใช้กับ .NET Framework, .NET Core หรือ .NET 5

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ