2011-10-15 8 views
11

मेरी C#/.NET आवेदन में मैं अगर किसी दिए गए निष्पादन योग्य डिजिटलहस्ताक्षरित किया गया है जांच करने के लिए है (अधिमानतः बिना Exception परीक्षण।)जांचें कि दिया गया निष्पादन योग्य डिजिटल हस्ताक्षरित और मान्य है या नहीं?

तब मैं जांच करने की आवश्यकता है अपने प्रमाण पत्र(के आधार पर वैध है स्थापित रूट प्रमाण पत्र) और यदि फाइल सामग्री हस्ताक्षर के लिए मान्य है।

BCL में इतने सारे वर्गों रहे हैं, मैं कहाँ & शुरू करने के लिए क्या उपयोग करने के लिए पता नहीं है, और कुछ भी मैं अब तक मिल गया है मेरा भ्रम को समाप्त नहीं करता है ...

मैं था

bool IsSignedFile(string path); 
Cert GetCertificateFromSignedFile(string path); 
bool IsValidCertificate(Cert cert) 
Sig GetSignatureFromSignedFile(string path); 
bool IsValidSignature(string path, Sig sig, Cert cert); 

जोड़ा गया स्पष्टीकरण: बिनाP/Invoke यदि संभव हो तो कुछ इस तरह, करना पसंद

वर्तमान में बड़ी समस्या यह है कि मुझे इस तरह की फ़ाइल के हस्ताक्षर को आसान तरीके से प्राप्त करने का कोई तरीका नहीं मिला है। अभी भी उम्मीद है कि एक प्रदान किया गया, प्रबंधित, BCL समाधान है क्योंकि मुझे आश्चर्य होगा कि वास्तव में वह हिस्सा गुम है या नहीं। (यह सिर्फ X509Certificate.CreateFromSignedFile साथ किया जा सकता प्रमाण पत्र के लिए, कि मान्य संभव भी है)
मैं मिश्रण नहीं है कि 50% काम P/Invoke कोड या एक बड़ा विभिन्न पुस्तकालय के साथ किया पसंद करेंगे।

मुझे AuthenticodeSignatureInformation कक्षा मिली है, हालांकि किसी दिए गए निष्पादन योग्य के लिए इसका उपयोग करने के बारे में कोई जानकारी नहीं है।

+0

http://stackoverflow.com/questions/7622732/c-how-to-detect-tampering-of- की संभावित डुप्लिकेट ऊपर कोड के सबसे लिखा था प्रामाणिकोड-हस्ताक्षरित फ़ाइल – DeCaf

+0

मुझे आशा है कि यह उत्तर दिए गए प्रश्न का डुप्लिकेट नहीं होगा;) – ordag

+0

से जुड़े प्रश्न में तीन उत्तरों हैं जो मैं देख सकता हूं। (उनमें से कोई भी स्वीकार नहीं किया गया था, लेकिन यह कहना नहीं है कि वे प्रासंगिक नहीं हैं)। Http: // stackoverflow पर एक और समान है।कॉम/प्रश्न/301024/मान्य-प्रामाणिकोड-हस्ताक्षर-ऑन-एक्स-सी-कैपिकॉम के बिना, लेकिन सब कुछ दुर्भाग्य से पी/आवेषण के उपयोग के लिए इंगित करता है। – DeCaf

उत्तर

8

आप केवल प्रबंधित कोड का उपयोग कर ऐसा कर सकते हैं नहीं मिल रहा है। मोनो प्रोजेक्ट में इसका अपना signcode और chktrust टूल्स हैं जो आपको प्रमाणीकरण (टीएम) हस्ताक्षरों को साइन और सत्यापित करने की अनुमति देता है।

दोनों Mono.Security.dll असेंबली का उपयोग करते हैं, जो विंडोज के तहत ठीक काम करता है, और सभी कोड एमआईटी.एक्स 11 लाइसेंस के तहत लाइसेंस प्राप्त है (इसलिए आप जो कुछ भी चाहते हैं वह कर सकते हैं)।

हालांकि रूट रूट प्रमाणपत्र की जांच करने के लिए आपको थोड़ा अतिरिक्त तर्क की आवश्यकता होगी, क्योंकि मोनो अपने स्वयं के स्टोर का उपयोग करता है - विंडोज़ पर नहीं। यह एक बड़ा मुद्दा नहीं होना चाहिए क्योंकि .NET (v2 के बाद से) उन वर्गों को प्रदान करता है जो उपयोगकर्ता/मशीन प्रमाणपत्र स्टोर को क्वेरी/एक्सेस करते हैं।

अस्वीकरण:मैं ;-)

+0

धन्यवाद, मैं उसमें देखने जा रहा हूं ... – ordag

+0

@poupou Mono.Security.dll का उपयोग कर 6 कारण के बारे में कुछ भी नहीं प्राप्त कर सकता है। यहां तक ​​कि कोड को देखते हुए, इसे केवल 6 कारण प्राप्त करना चाहिए यदि आप IsTrusted() को कॉल करते हैं या यदि फ़ाइल नाम सेट करने के बाद हस्ताक्षर की पुष्टि करने से पहले से कोई कारण नहीं था। समस्या यह है कि, मुझे पता है कि एक फ़ाइल जिसे मैं परीक्षण कर रहा हूं, में एक अवैध हस्ताक्षर है, फिर भी यह किसी भी तरह से CheckSignature() में चेक के पहले सेट को पास करता है और वैसे भी एक विश्वसनीय रूट त्रुटि के साथ समाप्त होता है। क्या यह हस्ताक्षर जांच में एक बग है? – BrutalDev

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