أصدرت معاينة التحديث التراكمي لشهر نوفمبر 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). سيؤدي التخلص() إلى مسح ملف المفتاح الخاص أثناء استدعاء التخلص() إذا تم تحميل 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.

هل تحتاج إلى مزيد من المساعدة؟

الخروج من الخيارات إضافية؟

استكشف مزايا الاشتراك، واستعرض الدورات التدريبية، وتعرف على كيفية تأمين جهازك، والمزيد.