我面临以下问题。
我运行以下代码
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搜索了一下,找到了类似问题的答案。我尝试启用LoadUserProfile
应用程序池,并且现在可以使用。
问题是我不了解设定时到底发生了LoadUserProfile
什么以及可能产生的后果。我的意思是,如果这是一件“好”的事情,那么为什么默认情况下它不处于“开启”状态?为什么它在那里呢?
当我LoadUserProfile
在IIS池中进行设置时,究竟会发生什么,会带来什么负面影响?
new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)
它避免将私钥写入存储,并且不需要服务器上的管理特权。
new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)
因此不需要用户配置文件。