मैंने निम्नलिखित मुद्दे का सामना किया।
मैं निम्नलिखित कोड चलाता हूं
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
और इसके परिणाम क्या होते हैं। मेरा मतलब है कि अगर यह एक "अच्छी" चीज है तो यह डिफ़ॉल्ट रूप से "ऑन" क्यों नहीं है और यह आखिर क्यों है?
जब मैं LoadUserProfile
IIS पूल में सेट करता हूं तो वास्तव में क्या होता है और इसके क्या नकारात्मक परिणाम हो सकते हैं?
new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)
जो स्टोर में निजी कुंजी लिखने से बचता है और सर्वर पर प्रशासनिक विशेषाधिकारों की आवश्यकता नहीं होती है।
new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)
ताकि उपयोगकर्ता प्रोफ़ाइल की आवश्यकता न हो।