מהדורת ה- Preview של העדכון המצטבר לנובמבר 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 כדי לחזור (שונה שלא במתאים) ל- .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.

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

גלה את יתרונות המנוי, עיין בקורסי הדרכה, למד כיצד לאבטח את המכשיר שלך ועוד.