في الثالث والعشرين من سبتمبر 2026 بدأت مايكروسوفت استخدام شهادة توقيع جديدة لحزم NuGet التي تنشرها. الخبر في ظاهره روتين إداري ممل: شهادة X.509 قاربت على الانتهاء فاستُبدلت بأخرى، والحزم القديمة تحتفظ بتوقيعاتها، والملايين من المطوّرين لن يلاحظوا شيئاً على الإطلاق.

لكن فئة واحدة ستلاحظ، وستلاحظ بقسوة: الفرق التي ضبطت سياسة ثقة صريحة تحدّد بالبصمة الرقمية من يحقّ له توقيع الحزم. هؤلاء — ولا أحد غيرهم — سيستيقظون على خط بناء متوقّف برسالة NU3034. المفارقة تستحق التأمّل: الإجراء الأمني الأفضل في التوثيق هو نفسه الإجراء الذي كسر البناء، بينما من ترك الإعدادات الافتراضية لم يمسّه شيء.

ما الذي تغيّر بالضبط

شهادة NuGet الجديدة: لماذا ينكسر البناء عند من فعل الصواب فقط؟ — برمجة وتطوير

الحزم المنشورة على NuGet يمكن أن تحمل توقيعاً من ناشرها (Author Signature) يثبت هويته. مايكروسوفت توقّع حزمها بشهادة، والشهادات لها عمر محدّد وتُدوَّر دورياً. التفاصيل العملية:

  • الشهادة الجديدة أصبحت الافتراضية لتوقيع حزم مايكروسوفت الجديدة اعتباراً من 23 سبتمبر 2026.
  • بصمتها (SHA-256): 9A1B131BEE0605433056A4EA3815478A8E177961A968C6C0027C1093D1FEB630.
  • البصمة السابقة: 566A31882BE208BE4422F7CFD66ED09F5D4524A5994F50CCC8B05EC0528C1353.
  • الحزم القديمة تبقى موقّعة بالشهادة السابقة وصالحة كما هي؛ التغيير يخصّ ما يُوقَّع من الآن فصاعداً.

الأثر محصور في حالتين فقط: من يضبط في nuget.config قائمة موقّعين موثوقين (Trusted Signers) تتضمّن مايكروسوفت ببصمة محدّدة، ومن يستخدم dotnet nuget verify ممرّراً بصمة صراحةً في أمر التحقّق. أي بيئة بلا سياسة ثقة مخصّصة لن تتأثر.

كيف يظهر العطل

الشكل المعتاد: تحديث حزمة مايكروسوفت إلى إصدار صدر بعد التدوير، فيفشل الاستعادة برسالة تقول إن شهادة التوقيع غير موثوقة لدى مزوّد الثقة. والمزعج أن العطل لا يظهر يوم التدوير، بل يوم ترقية أول حزمة موقّعة بالشهادة الجديدة — وقد يكون ذلك بعد أسابيع، حين يكون أحد قد نسي الإعلان تماماً.

الإصلاح سطر واحد يُضيف البصمة الجديدة مع الإبقاء على القديمة:

dotnet nuget trust author Microsoft 9A1B131BEE0605433056A4EA3815478A8E177961A968C6C0027C1093D1FEB630 --algorithm SHA256

نقطتان عمليتان كثيراً ما تُنسيان: أولاً، لا تحذف البصمة القديمة — ستحتاجها لتثبيت الحزم المنشورة قبل التدوير. ثانياً، ملف nuget.config قد يوجد في أكثر من موقع بنطاقات مختلفة (المستخدم، الحل البرمجي، الجهاز)، فعدِّل الملف الصحيح — أو حدّده بـ --configfile — وإلا نجح الإصلاح على جهازك وفشل في خادم البناء.

الدرس أكبر من NuGet

كل آلية «تثبيت» للثقة تشتري لك أماناً حقيقياً اليوم مقابل التزام صيانة غداً. المشكلة ليست في التثبيت، بل في أنه يُضبط مرة ثم يُنسى تماماً حتى يتحوّل إلى عطل مفاجئ في أسوأ توقيت.

هذا النمط يتكرّر في كل منظومة تقريباً، بالمنطق نفسه:

آلية التثبيت ما تحميك منه متى تنفجر
بصمات الموقّعين في NuGet حزمة مزوّرة تدّعي أنها من ناشر موثوق عند تدوير شهادة الناشر
تثبيت الشهادات في تطبيقات الجوال اعتراض الاتصال عبر شهادة وسيطة عند تجديد شهادة الخادم
تجميد المجاميع الاختبارية في ملفات القفل تبديل محتوى إصدار منشور عند إعادة نشر حزمة أو تغيير مرآة التحميل
تثبيت وسوم الحاويات ببصمة الصورة صورة مختلفة تحت الوسم نفسه عند إعادة بناء الصورة الأساسية لسبب أمني
مفاتيح المضيف في SSH انتحال هوية الخادم عند استبدال الخادم أو تدوير مفاتيحه

والقاسم المشترك في كل الصفوف: من طبّق الممارسة الأفضل هو من يتحمّل تكلفة الصيانة، ومن تجاهلها لا يشعر بشيء — إلى أن يقع الهجوم الذي كان التثبيت سيمنعه. لذلك الخلاصة ليست «لا تُثبّت»، بل «ثبّت وخطّط للتدوير من اليوم الأول».

كيف تجعل التثبيت قابلاً للصيانة

أربع ممارسات تحوّل التثبيت من قنبلة موقوتة إلى إجراء عادي:

  1. وثّق كل ثقة مثبّتة في مكان واحد. جدول قصير في مستودع البنية التحتية: ما المثبَّت، أين الملف، من صاحبه، وأين يُعلَن تدويره. من دون هذا الجدول، المعلومة الوحيدة الموجودة هي في رأس من ضبطها — وغالباً غادر الفريق.
  2. اسمح بأكثر من قيمة صالحة دائماً. البصمة القديمة والجديدة معاً، مفتاحان لا مفتاح واحد. التدوير بلا انقطاع يتطلّب نافذة تقبل فيها الاثنين.
  3. اجعل الفشل واضحاً في رسالته. أضِف في سكربت البناء فحصاً يترجم NU3034 (وما يماثله) إلى رسالة تقول صراحةً: «سياسة الموقّعين الموثوقين تحتاج تحديثاً، راجع هذا الملف» بدل رسالة عامة يقضي المهندس ساعتين في تفسيرها.
  4. اربطها بمواعيد الانتهاء لا بالذاكرة. أي شهادة لها تاريخ انتهاء معروف؛ ضع تذكيراً قبل شهرين منه على الفريق المالك. هذا وحده يحوّل الحادثة إلى مهمة مجدولة.

قائمة فحص سريعة لهذا الأسبوع

قبل أن تنتقل إلى مهمة أخرى، خمس دقائق تكفي للتأكّد أنك لست في طريق الاصطدام:

  • افتح nuget.config على مستوى المستخدم والمشروع وخادم البناء، وابحث عن قسم الموقّعين الموثوقين. وجوده يعني أنك معنيّ بالتحديث؛ غيابه يعني أنك في مأمن من هذه الحادثة تحديداً.
  • ابحث في سكربتات البناء عن أي استدعاء لـ dotnet nuget verify يمرّر بصمة صراحةً — هذه أكثر المواضع التي تُنسى، لأنها غالباً في ملف أنشئ مرة واحدة قبل سنوات.
  • بعد إضافة البصمة الجديدة، جرّب استعادة الحزم في بيئة نظيفة لا تحمل ذاكرة تخزين مؤقت سابقة، فالذاكرة المؤقتة المحلية قد تخفي الفشل على جهازك بينما ينتظرك في خادم البناء.
  • إن كنت تدير بيئة معزولة عن الإنترنت أو مرآة داخلية للحزم، تأكّد أن المرآة نفسها تنقل التوقيع الجديد سليماً بدل أن تعيد تغليف الحزم وتُسقِط التوقيع أثناء ذلك.

وماذا عن الفرق العربية الصغيرة؟

الفرق الصغيرة غالباً لا تضبط سياسات ثقة صريحة أصلاً، فهي في مأمن من هذه الحادثة تحديداً — لكنها في مأمن لأنها لا تستخدم الحماية، لا لأنها حلّت المشكلة. التوصية المتوازنة: لا تبدأ بتثبيت بصمات كل ناشر في المشروع، بل ابدأ بما يعطي أعلى عائد أمني بأقل صيانة — ملفات قفل ملتزَمة في المستودع، ومصدر حزم واحد معتمد بدل مصادر متفرّقة، ومراجعة بشرية لأي اعتمادية جديدة تدخل المشروع. ثم أضِف تثبيت الموقّعين حين يصبح لديك من يملك صيانته فعلاً.

أسئلة شائعة

هل أنا متأثر إن كنت أطوّر بـ .NET دون أي إعدادات خاصة؟ غالباً لا. التأثير محصور بمن ضبط قائمة موقّعين موثوقين في nuget.config أو يستخدم تحقّقاً صريحاً بالبصمة. للتأكد، ابحث عن عناصر الموقّعين الموثوقين في ملفات nuget.config الموجودة على مستوى المستخدم والمشروع وخادم البناء.

هل يعني هذا أن الحزم القديمة صارت غير موثوقة؟ لا. التوقيعات السابقة تبقى صالحة، ولهذا يجب الإبقاء على البصمة القديمة في قائمتك بعد إضافة الجديدة، وإلا فشلت تثبيتات الحزم المنشورة قبل التدوير.

ما الفرق بين هذا وبين النشر الموثوق (Trusted Publishing)؟ تدوير الشهادة يخصّ إثبات أن الحزمة جاءت من الناشر المعلن. النشر الموثوق يعالج مشكلة أخرى: كيف تُنشر الحزمة من خط البناء دون تخزين مفتاح نشر طويل العمر. الاثنان مكمّلان: الأول يحمي المستهلك، والثاني يحمي حساب الناشر من السرقة.

الخلاصة

تدوير شهادة توقيع NuGet ليس حدثاً أمنياً، ولا يتطلّب من أغلب المطوّرين شيئاً. لكنه اختبار ممتاز لسؤال يستحق أن يطرحه كل فريق على نفسه هذا الأسبوع: ما الذي ثبّتناه في مكان ما ونسينا أنه سينتهي؟

الإجراء العملي اليوم: ابحث في مشروعك وخوادم البناء عن كل بصمة أو مفتاح أو مجموع اختباري مثبّت يدوياً، اكتبها في جدول واحد بأسماء ملّاكها وتواريخ انتهائها، واجعل لكل واحد منها إمكانية قبول قيمتين أثناء التدوير. الفارق بين فريق يمرّ عليه هذا الخبر دون أن يشعر، وفريق يقضي صباحاً كاملاً في تصحيح خط بناء متوقّف، هو هذا الجدول تحديداً.