2009-07-28 9 views
90

मेरे सहयोगियों में से एक असेंबली पर हस्ताक्षर करने के लिए बहुत उत्सुक है। वह सचमुच कुछ भी हस्ताक्षर करने की कोशिश करता है। यहां तक ​​कि जब हम माइक्रोसॉफ्ट से असेंबली का उपयोग करते हैं, जो हस्ताक्षरित नहीं हैं, तो वह स्रोत कोड लेगा, इसे साइन करेगा और फिर अन्य डेवलपर्स से इसकी प्रतिलिपि का उपयोग करने के लिए कहेंगे।.NET असेंबली पर हस्ताक्षर नहीं करने के साथ कुछ भी गलत है?

मैं एक असेंबली पर हस्ताक्षर करने के पीछे मूल विचार को समझ सकता हूं: यह सुनिश्चित करने के लिए कि किसी विशेष असेंबली को कुछ डोडी हैकर द्वारा समझौता नहीं किया जाता है। इसलिए यदि हम एक सॉफ्टवेयर विकास कंपनी हैं, तो हमें अपने ग्राहकों को कुछ .NET लाइब्रेरी जारी करने से पहले हमारी असेंबली पर हस्ताक्षर करना चाहिए।

हालांकि, हम मुख्य रूप से यहां अपने स्वयं के उपयोग के लिए वेब अनुप्रयोग विकसित करते हैं, और मैं केवल हमारे द्वारा उपयोग की जाने वाली प्रत्येक असेंबली पर हस्ताक्षर करने का बिंदु नहीं देख सकता।

क्या मुझे यहां कुछ याद आ रही है?

+1

यहां कुछ भ्रम की बात करने के लायक है, "डिजिटल हस्ताक्षर" (जिसमें एक सुरक्षा उद्देश्य है) और "मजबूत नामित असेंबली" जो नरक के लिए एक फिक्स हैं और जीएसी पुस्तकालयों से जुड़ने में सहायता करते हैं। एक या दूसरे का उपयोग करना समान है और दोनों को असेंबली पर हस्ताक्षर करने के मामले में बोली जा सकती है। ऐसा लगता है जैसे कुछ पोस्टर एक के बारे में सोच रहे हैं और अन्य एक या दोनों के बारे में सोच रहे हैं। – amalgamate

उत्तर

47

एक भरोसेमंद माहौल में उपयोग की जाने वाली असेंबली पर हस्ताक्षर करना मुझे लगता है कि मुझे अधिक पसंद है।

हस्ताक्षरित असेंबली पर एक दिलचस्प बिंदु यह है कि वे हस्ताक्षरित असेंबली से लोड करने के लिए थोड़ा धीमे हैं, क्योंकि उन्हें क्रिप्टोग्राफ़िक रूप से सत्यापित किया जाना चाहिए।

किसी असेंबली पर हस्ताक्षर करने के लिए, किसी भी असेंबली पर निर्भर करता है जिस पर भी निर्भर किया जाना चाहिए। मेरा अनुमान है कि यह आपके सहयोगी की हर चीज पर हस्ताक्षर करने की इच्छा में योगदान देता है - संकलक इसकी मांग कर रहा है।


संपादित इस उत्तर तुम दोनों के समर्थक और के खिलाफ शिविर देख सकते हैं लिखने के बाद से बराबर समर्थन है। यहां स्पष्ट रूप से सही जवाब नहीं है।

इस संपादन को मजबूर करने वाला बिंदु यह है कि आजकल हम NuGet से इतने सारे खुले स्रोत पुस्तकालय लेते हैं, और उनमें से कई बिल्कुल हस्ताक्षरित नहीं हैं। अगर आप अपनी असेंबली पर हस्ताक्षर करना चाहते हैं, तो आपको किसी भी निर्भरता पर हस्ताक्षर करने की आवश्यकता होगी। हस्ताक्षरित ओपन सोर्स लाइब्रेरीज़ में से कई में निजी स्रोतों का उपयोग उनके स्रोत भंडारों में सार्वजनिक रूप से उपलब्ध होने पर हस्ताक्षर करने के लिए किया जाता है।

जैसा कि सब कुछ के साथ व्यापार-बंद किए जाने हैं। निजी वातावरण में काम करने के अपने अनुभव में, हस्ताक्षर के लाभ ज्यादातर सैद्धांतिक (या अकादमिक, @user289100 उल्लेखों के रूप में) हैं, जब तक कि आप सरकारी एजेंसियों के बारे में चिंतित न हों, इस मामले में आपको अपने इतने सारे स्तरों के बारे में पागल होना चाहिए हस्ताक्षर करने वाले बुनियादी ढांचे को थोड़ी सी कोशिश की तरह लग रहा है। अन्यथा चुनौतियों की मात्रा जो सबकुछ पर हस्ताक्षर करने से बाहर निकलती है, बस इसके लायक नहीं लगती है। हालांकि आपके पर्यावरण में अलग-अलग आवश्यकताएं हो सकती हैं, या आप एक मस्तिष्कवादी हो सकते हैं!

मजबूत नामों का उपयोग करते समय संस्करण असेंबली से संबंधित चुनौतियों के बारे में जानकारी के लिए Teun D's answer भी देखें।

+17

सहमत हैं, यह अब उनके लिए एक क्रैक लत की तरह है – Janie

+3

एक और बात यह है कि यदि आप इस असेंबली को विभिन्न एप्लिकेशन में साझा करना चाहते हैं तो हस्ताक्षर करना आवश्यक है (यानी जीएसी)। –

3

मुझे लगता है कि यह एक कचरे की तरह लगता है। यह सुनिश्चित करने के लिए वास्तव में जरूरी है कि फ़ाइल वह है जो आपको लगता है (और इसके साथ छेड़छाड़ नहीं हुई है)। लेकिन अगर आप अपने नेटवर्क सुरक्षा और वेब सर्वर की सीमाओं पर भरोसा करते हैं, तो अपने वेब असेंबली पर हस्ताक्षर करना एक अनावश्यक कदम की तरह लगता है।

लेकिन हो सकता है कि यह मेरा छोटा-सा व्यवसाय अनुभव हो। यदि आप किसी मिशन-महत्वपूर्ण ऑनलाइन बैंकिंग वेबसाइट के बारे में बात कर रहे हैं, तो साइन आउट करें।

9

क्या आपके सहयोगी ने आपको पर कोई संकेत दिया है क्यों वह असेंबली पर हस्ताक्षर करना पसंद करता है? हस्ताक्षर करने का एक फायदा यहां पर चर्चा नहीं की गई है, यह अभी भी है कि केवल हस्ताक्षरित असेंबली जीएसी में रखी जा सकती है (यानी।प्रबंधित प्रक्रियाओं में साझा किया जाना चाहिए), लेकिन डाउनसाइड्स मेरे (स्वीकार्य रूप से अनुभवहीन) परिप्रेक्ष्य से ऊपर की ओर बढ़ने लगते हैं।

माइक्रोसॉफ्ट कोड पर हस्ताक्षर करने के बारे में आपका उपेक्षा विशेष रूप से मुझे संदेह करता है। अगर एमएस ने कोड पर हस्ताक्षर नहीं किया है, तो शायद एक कारण है, है ना? और इसे हस्ताक्षर करके, आप इसके लिए ज़िम्मेदारी ले रहे हैं जब आपने इसे नहीं लिखा - भविष्य के लिए आपको काटने का एक और मौका।

+2

असल में मुझे यकीन नहीं है कि माइक्रोसॉफ्ट ने निश्चित रूप से एंटरप्राइज़ लाइब्रेरी 3.1 – oscarkuo

+1

पर हस्ताक्षर क्यों नहीं किया है प्रक्रियाओं के बीच असेंबली साझा करने से असेंबली को जीएसी में क्यों होना चाहिए? –

+4

ऐसा नहीं है कि आप रनटाइम संदर्भों को उसी .dll पर साझा नहीं कर सकते हैं, यह केवल मजबूत नामों (यानी हस्ताक्षरित वाले) वाले असेंबली जीएसी में मिल सकते हैं - और जीएसी में असेंबली डाल दी जाती है ताकि उन्हें साझा किया जा सके। –

4

असेंबली पर हस्ताक्षर करने के बारे में एक और बात यह है कि कोई भी आपके स्थान पर गलत नहीं लगा सकता है (यह भी - एक दुर्घटना से स्वयं)। उदाहरण के लिए, यदि आप कोई प्रोग्राम बनाते हैं जो एक असेंबली Foo.dll, संस्करण 1.0 को संदर्भित करता है, तो कोई भी एक ही संस्करण के साथ एक असेंबली बना सकता है, और जब आप अपनी लाइब्रेरी पर हस्ताक्षर करते हैं, तो यह आपकी जगह बदल सकता है, यह संभव नहीं होगा कम से कम मुझे नहीं लगता कि यह आसानी से संभव है)।

4

हस्ताक्षर केवल तभी जरूरी हैं जब असेंबली जीएसी में रखी जाती है, और कुछ नहीं। हस्ताक्षरित असेंबली किसी को उनके साथ गड़बड़ करने से नहीं रोकती हैं। एक हैकर अभी भी हस्ताक्षर और किसी भी अन्य कोड को हस्ताक्षर कर सकता है जो हस्ताक्षर के लिए जांच करता है।

+2

किसी वेब एप्लिकेशन के लिए, हैकर को web.config को भी संशोधित करना होगा। – Tangurena

+3

यदि कोई हैकर किसी असेंबली से हस्ताक्षर हटा सकता है, तो web.config उन्हें रोकने के लिए नहीं जा रहा है। – ZippyV

+4

डाउनवॉटर को http://ianpicknell.blogspot.com/2010/02/tampering-with-strong-named-assembly.html और उस से जुड़े समान लेख पढ़ने की सलाह दी जाती है। – Constantin

2

अगर आप कुछ शिप करने जा रहे हैं और/या वास्तव में ऐसा करने का कोई कारण है तो ऐसा करने के बारे में सोचें। हर दूसरे मामले में, यह सिर्फ परेशानी है। मैं आपके कार्यकर्ता से पूछूंगा कि वह वास्तव में ऐसा करने से क्या बाहर निकलता है।

मुझे पहले हस्ताक्षरित असेंबली-आईटिस का सामना करना पड़ा है और यह बाद में दर्द है, खासकर जब आप उन लोगों की संख्या पर विचार करते हैं जिनके पास असेंबली पर हस्ताक्षर करने के बारे में कोई जानकारी नहीं है, यह क्या है और यह कैसे करें। यह एक और चीज है जिसे आपको पूरी तरह से जरूरी नहीं होने तक खुद को चिंता करने की ज़रूरत नहीं है।

38

एक अतिरिक्त बिंदु: अपने असेंबली पर हस्ताक्षर करना संस्करणों पर पिछड़ा संगतता तोड़ता है। आपके संदर्भ सभी संस्करण संख्याओं और संस्करणों को अन्य संस्करण संख्याओं के साथ शामिल करना शुरू करते हैं, जिन्हें गैर-संगत माना जाता है। यह वितरित असेंबली के नए संस्करणों में उन्नयन करने में बाधा डालता है।

मेरी राय में, आप केवल कोड हस्ताक्षर विधानसभाओं आप इसे से कुछ ठोस लाभ देखना चाहिए अगर:

  • यदि आप वातावरण के लिए तैनात जहां अविश्वसनीय लोगों कुछ प्लग-इन में अपनी विधानसभाओं
  • स्पर्श हो सकता है मॉडल, जहां आप ट्रस्ट
  • को अपग्रेड करने के सबूत के रूप में प्रमाण पत्र का उपयोग करना चाहते हैं, यदि आपका कोड अन्य हस्ताक्षरित कोड से कॉल करने योग्य होना चाहिए (एक परियोजना जैसे कि लॉग 4नेट कहें, तो उचित रूप से उनके कोड को व्यापक रूप से प्रयोग करने योग्य संकेत दें; वे बड़े पैमाने पर गड़बड़ कर रहे हैं कुछ साल पहले अपनी गुप्त कुंजी खोकर संगतता, कोड-हस्ताक्षर का एक और जोखिम)।
  • आप GAC
59

मैं गैर-साइन्ड विधानसभाओं का लाभ ले लिया गया है से पहले और शैक्षिक सेटिंग्स में दिखाया गया है लोगों को क्यों यह महत्वपूर्ण है मुद्दों से बचने के लिए करने के लिए तैनात करने के लिए चाहते हैं। मैंने एक डीएलएल फ़ाइल को प्रतिस्थापित किया जो कि एक ही नाम, एक ही हस्ताक्षर के साथ बनाया गया था, और मूल कोड कॉपी और पेस्ट करने के लिए .NET Reflector का उपयोग किया गया था, लेकिन मेरे में मैंने उपयोगकर्ता नाम और पासवर्ड ईमेल किए थे 'वास्तविक' कोड को कॉल करने से पहले पारित किया गया।

यदि हस्ताक्षर किए गए हैं, तो आप हस्ताक्षर मैच कर सकते हैं, लेकिन प्रतिस्थापित नहीं कर सकते हैं। ज़िप्पी के मुताबिक, रन-टाइम शिकायत त्रुटि होगी।

असेंबली हस्ताक्षर करना कभी अधिक नहीं होता है। इसमें 30 सेकंड लगते हैं। ऐसा लगता है कि यदि आप देश में रहते हैं तो अपने दरवाजों को लॉक करना अधिक है। यदि आप अपने सामान के साथ जुआ करना चाहते हैं, तो आगे बढ़ें, इसे खोलें। इसे निकालने के लिए केवल एक सुरक्षा उल्लंघन होता है।असेंबली पर हस्ताक्षर करने में केवल 30 सेकंड लगते हैं और ऐसा कोई व्यावसायिक मामला नहीं है। प्रदर्शन प्रभाव लापरवाही है।

+11

यदि कोई हैकर डीएलएल बदल सकता है तो वह उस एप्लिकेशन को भी बदल सकता है जो डीएलएल को कॉल करता है। – ZippyV

+12

यह सही ज़िप्पी है, लेकिन एप्लिकेशन पर हस्ताक्षर करने की कुंजी के बिना उन्हें एक एनवायरनमेंट में चलाने के लिए मुश्किल हो रही है, जहां मूल एप्लिकेशन के केवल हस्ताक्षरित संस्करण को चलाने की अनुमति है, जो मामला होगा मैंने जिन वातावरणों में काम किया है, वे पेड़ के लिए जंगल खो रहे हैं: एक असेंबली पर हस्ताक्षर करने के लिए एक अनियंत्रित सुरक्षा जोखिम ले रहा है जिसमें 30 सेकंड लगने लगते हैं और कोई व्यवसायिक मामला या असली दुनिया का मामला नहीं है जिसे मैंने कभी देखा है एक असेंबली पर हस्ताक्षर नहीं करें। – user289100

1

जब आप इसे तैनाती-से-द-वेब ClickOnceXBAP में उपयोग करते हैं तो आपको अपनी असेंबली पर हस्ताक्षर करने की आवश्यकता होती है।

इसके अलावा, सभी संदर्भित असेंबली को भी हस्ताक्षर करने की आवश्यकता होगी।

1

हम अपने विधानसभाओं पर हस्ताक्षर बार देखते हैं, क्योंकि जब हम निम्नलिखित की तरह त्रुटियों मिल (यह एक परीक्षण से है, लेकिन एप्लिकेशन चलते समय हो सकता है):

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 पैकेज लिख रहे हैं, तो अपने विधानसभाओं साइन इन करें। बिना हस्ताक्षर किए गए असेंबली हमारे लिए अजीब हैं जो यह सुनिश्चित करना चाहते हैं कि हम अपने कोड का नवीनतम संस्करण चला रहे हैं। मैं विजुअल स्टूडियो को ठीक नहीं कर सकता। मैं बस इतना कर सकता हूं कि विजुअल स्टूडियो को यह गलत लगता है। तो कृपया, अपने nuget असेंबली पर हस्ताक्षर करें।

+0

मुझे लगता है कि आपका बिंदु हस्ताक्षर करने के बजाय असेंबली संस्करण से अधिक संबंधित है! –

संबंधित मुद्दे

 संबंधित मुद्दे