जब मैं IIS पूल के LoadUserProfile को सेट करता हूं तो वास्तव में क्या होता है?


103

मैंने निम्नलिखित मुद्दे का सामना किया।

मैं निम्नलिखित कोड चलाता हूं

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

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

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

जब मैं LoadUserProfileIIS पूल में सेट करता हूं तो वास्तव में क्या होता है और इसके क्या नकारात्मक परिणाम हो सकते हैं?


6
बस इसके बाद, यदि उपयोगकर्ता प्रोफ़ाइल लोड करना आपके लिए एक समस्या है, तो आप प्रमाणपत्र को लोड करना बदल सकते हैं new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)ताकि उपयोगकर्ता प्रोफ़ाइल की आवश्यकता न हो।
vcsjones

1
यदि ApplicationPoolIdentity के रूप में चल रहा है, तो आप उपयोग करना चाहते हैं new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)जो स्टोर में निजी कुंजी लिखने से बचता है और सर्वर पर प्रशासनिक विशेषाधिकारों की आवश्यकता नहीं होती है।
नट

जवाबों:


117

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

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

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

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

जब मैं IIS पूल में LoadUserProfile सेट करता हूं तो वास्तव में क्या होता है

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

अंत में यह उबलता LoadUserProfileहै जिसे IIS द्वारा AppPool शुरू होने पर कहा जाता है।

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

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


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

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

1
क्या LoadUserProfile=trueIIS में सेट करना और डिफ़ॉल्ट अस्थायी फ़ोल्डर% TEMP% स्थान C:\Users\C:\Users\AccountName\AppData\Local\Tempको कहीं और से बदलना संभव है? उदाहरण "D: \ AppTempData"
मुरली मुरुगेसन

मुरली मुरुगेसन - क्या आपको कभी इस सवाल का जवाब मिला? मेरे साथ भी वही दिक्कत है। मैं डिफ़ॉल्ट Temp निर्देशिका परिवर्तित करना चाहते हैं।
VBAHole

1
मैं इस वर्ष में एक बैक-एंड सेवा का निर्माण कर रहा था जिसे X509 क्लाइंट सर्टिफिकेट प्रमाणीकरण द्वारा संरक्षित एक दूरस्थ वेब सेवा में कहा जाता था। क्योंकि व्यक्तिगत प्रमाणपत्र उपयोगकर्ता की प्रोफ़ाइल में संग्रहीत किए जाते हैं, सेवा को स्थापित करते समय, मुझे सेवा के लॉगऑन खाते के रूप में लक्ष्य सर्वर पर लॉग इन करना पड़ता था, जो उपयोगकर्ता प्रोफ़ाइल बनाता है, फिर लॉगऑन खाते के प्रमाणपत्र स्टोर में ग्राहक प्रमाणपत्र स्थापित करें। उसके बाद, क्लाइंट प्रमाणपत्र रन टाइम पर लोड होगा।
क्रेग बोलैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.