2013-06-17 13 views
67

मुझे निम्नलिखित समस्या का सामना करना पड़ा।जब मैं आईआईएस पूल के LoadUserProfile सेट करता हूं तो वास्तव में क्या होता है?

मैं दो प्रक्रियाओं में निम्न कोड

var binaryData = File.ReadAllBytes(pathToPfxFile); 
var cert = new X509Certificate2(binaryData, password); 

चलाते हैं। प्रक्रियाओं में से एक LOCAL_SYSTEM के तहत चलाता है और वहां यह कोड सफल होता है। एक और एक के अंदर चलाता है "उपयोगकर्ता" स्थानीय समूह से संबंधित किसी स्थानीय उपयोगकर्ता खाते के अंतर्गत IIS और वहाँ मैं निम्न अपवाद प्राप्त करें:

System.Security.Cryptography.CryptographicException 
Object was not found. 
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) 
at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx) 
at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags) 
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password) 
//my code here 

तो मैं थोड़ा Google पर और इसी तरह के सवाल का एक प्रकार के this answer पाया। मैंने एप्लिकेशन पूल के लिए LoadUserProfile को सक्षम करने का प्रयास किया और यह अब काम करता है।

समस्या यह है कि जब मैं LoadUserProfile सेट करता हूं और क्या परिणाम हो सकता है तो समस्या ठीक नहीं होती है। मेरा मतलब है कि अगर यह एक "अच्छी" चीज है तो यह डिफ़ॉल्ट रूप से "चालू" क्यों नहीं है और यह सब के बाद क्यों है?

आईआईएस पूल में LoadUserProfile सेट करते समय वास्तव में क्या होता है और इसके नकारात्मक नतीजे क्या हो सकते हैं?

+3

बस एक विचारधारा, यदि उपयोगकर्ता प्रोफ़ाइल लोड करना आपके लिए एक समस्या है, तो आप प्रमाण पत्र की अपनी लोडिंग को 'नए X509Certificate2 (बाइनरीडेटा, पासवर्ड, X509KeyStorageFlags' में बदल सकते हैं।MachineKeySet) 'इसलिए एक उपयोगकर्ता प्रोफ़ाइल की आवश्यकता नहीं है। – vcsjones

उत्तर

77

मेरा मतलब है कि यह "अच्छी" चीज है तो यह डिफ़ॉल्ट रूप से "चालू" क्यों नहीं है और यह सब के बाद क्यों है?

आईआईएस 6 ने कभी भी उपयोगकर्ता प्रोफाइल लोड नहीं किया। मुझे लगता है कि व्यवहार को लगातार बनाए रखने के लिए यह डिफ़ॉल्ट रूप से बंद है, और व्यवस्थापक को इसे ऑप्ट-इन करना होगा।

मैंने एप्लिकेशन पूल के लिए LoadUserProfile को सक्षम करने का प्रयास किया और यह अब काम करता है।

इसका कारण यह है विंडोज क्रिप्टोग्राफिक सेवा प्रदाता की दुकान या उपयोगकर्ता की दुकान में अपने प्रमाण पत्र के लिए एक महत्वपूर्ण लोड करने के लिए कोशिश कर रहा था, और तब से एक प्रोफ़ाइल उपलब्ध नहीं था, एक cryptographic context उपलब्ध नहीं था सबसे अधिक संभावना है। ध्यान दें कि Load User Profile सेटिंग केवल उपयोगकर्ता खातों पर लागू होती है। नेटवर्क सेवा जैसे सर्विस अकाउंट और एप्लीकेशनपूल इडेंटिटी के पास विशेष हैंडलिंग है।

वास्तव में क्या होता है जब मैं आईआईएस पूल

खैर में LoadUserProfile सेट, उपयोगकर्ता प्रोफ़ाइल भरी हुई है। इसमें उनके क्रिप्टोग्राफिक स्टोर, पर्यावरण चर जैसे% TEMP%, और अन्य शामिल हैं।

यह अंततः उबलता है LoadUserProfile आईआईएस द्वारा ऐपपूल शुरू होने पर बुलाया जाता है।

क्या नकारात्मक परिणाम हो सकते हैं?

यह आईआईएस 6 पर चलने वाले ऐप के साथ पिछड़ा संगतता तोड़ सकता है, जिसने उपयोगकर्ता प्रोफ़ाइल लोड नहीं की है। पर्यावरण चर लोड कर रहे हैं। उदाहरण के लिए, जब लोड उपयोगकर्ता प्रोफ़ाइल सत्य है, तो% TEMP% पर्यावरण चर C:\Users\AccountName\AppData\Local\Temp (उदाहरण के लिए) है। जब झूठा, यह C:\WINDOWS\Temp है।

+1

+1 ऐप पूल पहचान के रूप में नेटवर्क सेवा के लिए, लेकिन ApplicationPoolIdentity मेरे लिए सफल नहीं था। –

+3

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

+1

क्या आईआईएस में 'LoadUserProfile = true' सेट करना संभव है और' tem: \ Users \ C: \ Users \ AccountName \ AppData \ Local \ Temp' से कहीं और डिफ़ॉल्ट temp फ़ोल्डर% TEMP% स्थान बदलना संभव है? उदाहरण "डी: \ AppTempData" –

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

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