هل هناك أي خطأ في عدم التوقيع على تجميع .NET؟

StackOverflow https://stackoverflow.com/questions/1197133

  •  20-09-2019
  •  | 
  •  

سؤال

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

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

ومع ذلك، فإننا نقوم في المقام الأول بتطوير تطبيقات الويب لاستخدامنا الخاص هنا، ولا أستطيع أن أرى المغزى من التوقيع على كل تجميع نستخدمه.

نسيت شيئا ما هنا؟

هل كانت مفيدة؟

المحلول

إن توقيع التجميعات المستخدمة في بيئة موثوقة يبدو مبالغة بالنسبة لي.

هناك نقطة مثيرة للاهتمام حول التجميعات الموقعة وهي أن تحميلها أبطأ قليلاً من التجميعات غير الموقعة، حيث يجب التحقق منها تشفيريًا.

من أجل التوقيع على التجمع، يجب أيضًا التوقيع على أي تجميعات يعتمد عليها.أعتقد أن هذا يساهم في رغبة زميلك في التوقيع على كل شيء - والمترجم يطالب بذلك.


يحرر منذ كتابة هذه الإجابة، يمكنك أن ترى أن كلا من المعسكرين المؤيد والمعارض يتمتعان بدعم متساوٍ تقريبًا.من الواضح أنه لا توجد إجابة صحيحة هنا.

النقطة التي فرضت هذا التعديل هي أننا في الوقت الحاضر نأخذ العديد من المكتبات مفتوحة المصدر من NuGet، والعديد منها غير موقعة على الإطلاق.إذا أردت التوقيع على التجميع الخاص بك، فستحتاج إلى توقيع أي تبعيات أيضًا.تحتوي العديد من المكتبات مفتوحة المصدر الموقعة على المفاتيح الخاصة المستخدمة للتوقيع متاحة للعامة في مستودعات المصدر الخاصة بها.

كما هو الحال مع كل شيء، هناك مقايضات يجب القيام بها.من خلال تجربتي في العمل في بيئات خاصة، فإن فوائد التوقيع هي في الغالب نظرية (أو أكاديمية، كما هو الحال مع العديد من الأشخاص). @user289100 يذكر)، إلا إذا كنت قلقًا بشأن قيام الوكالات الحكومية بتعديل التعليمات البرمجية الخاصة بك، وفي هذه الحالة يجب أن تشعر بجنون العظمة بشأن العديد من مستويات البنية التحتية الخاصة بك بحيث يبدو التوقيع بمثابة قدر صغير من الجهد.وإلا فإن حجم التحديات التي تترتب على الاضطرار إلى التوقيع على كل شيء لا يبدو يستحق العناء.ومع ذلك، قد يكون لبيئتك متطلبات مختلفة، أو قد تكون مازوشيًا!

أنظر أيضا إجابة تيون د للحصول على معلومات حول التحديات المتعلقة بتجميعات الإصدار عند استخدام الأسماء القوية.

نصائح أخرى

لقد استفدت من التجمعات غير الموقعة للالتفاف حول المشكلات قبل وفي الإعدادات الأكاديمية التي أظهرت الأشخاص لماذا الأمر مهم. لقد استبدلت ملف DLL الذي كان غير موقعة (مرة أخرى في إعداد أكاديمي) مع واحد قمت به بنفس الاسم والنفقات نفسها واستخدامها .net عاكس لنسخ ولصق التعليمات البرمجية الأصلية، ولكن في الألغام التي قمت بإرسالها عبر البريد الإلكتروني وكلمات المرور التي تم تمريرها قبل استدعاء رمز "حقيقي".

إذا تم توقيعها، فيمكنك إجراء مباراة توقيع، ولكن لا تحل محل. على عكس ما يقوله Zippy، سيكون هناك خطأ في امتثال وقت التشغيل.

توقيع التجميعات ليست مبالغة أبدا. يستغرق 30 ثانية. إنه مثل قول قفل الأبواب الخاصة بك هو المبالغة إذا كنت تعيش في البلاد. إذا كنت ترغب في المقامرة مع ممتلكاتك، فأخذها، اتركها مفتوحة. يستغرق فقط خرق أمني واحد لإطلاق النار. يستغرق سوى 30 ثانية لتوقيع تجميع وليس هناك أي حالة عمل لا. آثار الأداء مهملة.

نقطة إضافية واحدة: توقيع التجميعات الخاصة بك يكسر التوافق مع الإصدارات المتخلفة. المراجع الخاصة بك تبدأ جميعها بتضمين أرقام الإصدارات والإصدارات مع أرقام الإصدار الأخرى تعتبر غير متوافقة. يعيق هذا الترقية إلى الإصدارات الأحدث من التجميعات الموزعة.

في رأيي، يجب عليك فقط تجميعات الإشارات فقط إذا رأيت بعض المكاسب الخرسانية منه:

  • إذا نشرت في بيئات حيث قد يلمس الأشخاص غير الموثوق بهم من جمعياتك
  • في بعض النماذج المكونات الإضافية، حيث تريد استخدام الشهادة كدليل على ترقية الثقة
  • إذا كان يجب الاتصال به رمزك من التعليمات البرمجية الأخرى من التعليمات البرمجية الأخرى (مثل مشروع مثل، فقل LOG4NET، يوقع بشكل مبرر رمزه لتكون قابلة للاستخدام على نطاق واسع؛ لقد افسدت بشكل كبير في التوافق من خلال فقدان مفتاح سرهم قبل بضع سنوات، خطر آخر من توقيع التعليمات البرمجية) وبعد
  • إذا كنت ترغب في النشر في GAC

هل أعطاك زميلك أي مؤشرات لماذا يحب التوقيع التجميع؟ ميزة واحدة للتوقيع الذي لم تتم مناقشته هنا بعد أنه يمكن وضع التجمعات الموقعة فقط في GAC (أي يتم تقاسمها عبر العمليات المدارة)، ولكن يبدو أن المنزلات السلبية تفوق الصعود من منظوري (غير المتعترف بها).

يبدو أن حكايةك حول رمز التوقيع الذاتي مايكروسوفت المشتبه فيه بشكل خاص بالنسبة لي. إذا لم توقع MS الكود، فمن المحتمل أن يكون هناك سبب، أليس كذلك؟ ومن خلال توقيعه، تتحمل المسؤولية عن ذلك عندما لا تكتبها - فرصة أخرى للمستقبل لدنك.

شيء آخر حول توقيع الجمعية هو أنه لا يستطيع المرء أن يقوم بحقنه غير صحيح في مكانك (أيضا - بنفسك عن طريق وقوع حادث). على سبيل المثال، إذا قمت بإنشاء برنامج يشير إلى مجموعة FOO.DLL، الإصدار 1.0، يمكن لشخص ما إنشاء التجميع، مع نفس الإصدار، واستبدالك، عند توقيع مكتبتك، لن يكون ذلك ممكنا (في الأقل لا أعتقد أنه من الممكن بسهولة).

التواقيع ضرورية فقط إذا تم وضع التجميعات في GAC، لا شيء آخر. التجميعات الموقعة لا تمنع شخص ما للعلوف معهم. لا يزال بإمكان المتسلل تجريد التوقيع وأي شفرة أخرى يتحقق من التوقيع.

أوافق على أنه يبدو وكأنه قليل من النفايات. هناك حاجة ماسة حقا لضمان أن الملف هو ما تعتقد أنه (ولم يتم العبث به). ولكن إذا كنت تثق في حدود أمان الشبكة الخاصة بك وخادم الويب الخاص بك، فإن التوقيع على تجميعات الويب الخاصة بك يبدو وكأنه خطوة زائدة عن الحاجة.

ولكن ربما هذه هي تجربتي التجارية الصغيرة تتحدث. إذا كنت تتحدث عن موقع مصرفي عبر الإنترنت من المهمة، فقم بالتوقيع بعيدا.

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

لقد واجهت توقيع تجميعها من قبل وهي ألم في الخلف، خاصة عندما تفكر في كمية الأشخاص الذين ليس لديهم أي معرفة بتوقيع التجميع، وماذا تفعل ذلك. إنه مجرد شيء آخر يجب أن تضطر إلى الاهتمام بنفسك ما لم يكن ذلك ضروريا تماما.

تحتاج إلى توقيع تجميعك عند استخدامه في نشر من الويب ClickOnce. XBAP..

بالإضافة إلى ذلك، سيحتاج جميع التجمعات المشار إليها إلى توقيعها أيضا.

نحن نتوقع تجمعاتنا لأن هناك أوقات عندما نحصل على أخطاء مثل ما يلي (هذا واحد من الاختبار، ولكن يمكن أن يحدث عند تشغيل التطبيق):

System.IO.FileLoadException : Could not load file or assembly 'Latitude.Platform.Core, Version=1.0.5871.22518, Culture=neutral, PublicKeyToken=7926214d13e12325' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

TearDown : System.IO.FileLoadException : Could not load file or assembly 'Latitude.Platform.Core, Version=1.0.5871.22518, Culture=neutral, PublicKeyToken=7926214d13e12325' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

وجدنا أن بصرية الاستوديو يحصل الخطأ في بعض الأحيان و يدير الرمز القديم.

إذا كنت تريد خطأ إذا كنت تقوم بتشغيل التعليمات البرمجية القديمة، فقم بتوقيع التجميعات الخاصة بك.

إذا كنت تكتب Nuget. صفقة، يرجى توقيع التجمعات الخاصة بك. وبعد التجميعات غير الموقعة محرجة بالنسبة لنا الذين يريدون التأكد من أننا نفذ أحدث إصدار من التعليمات البرمجية لدينا. لا أستطيع إصلاح Visual Studio. وبعد كل ما يمكنني فعله هو اكتشاف أن Visual Studio حصل على خطأ. لذا يرجى التوقيع على جمعيات Nuget الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top