当我设置IIS池的LoadUserProfile时究竟发生了什么?
我遇到了以下问题。
我运行下面的代码
var binaryData = File.ReadAllBytes(pathToPfxFile); var cert = new X509Certificate2(binaryData, password);
在两个过程中。 其中一个进程在LOCAL_SYSTEM
下运行,并且代码成功。 另一个运行在属于“用户”本地组的本地用户帐户下的IIS,在那里我得到以下exception:
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
所以我Googlesearch了一下,发现了一个类似的问题的答案 。 我试图为应用程序池启用LoadUserProfile
,现在它工作。
问题是当我设置LoadUserProfile
时会发生什么,以及可能会产生什么后果。 我的意思是,如果这是一个“好”的东西,那么为什么它不是默认的“开”,为什么它在那里呢?
当我在IIS池中设置LoadUserProfile
时会发生什么,它会产生什么负面影响?
我的意思是,如果这是一个“好”的东西,那么为什么它不是默认的“开”,为什么它在那里呢?
IIS 6从未加载用户configuration文件。 我会认为这是默认closures,以保持行为一致,pipe理员必须selectjoin它。
我试图为应用程序池启用LoadUserProfile,现在它工作。
这很可能是因为Windowsencryption服务提供程序试图在用户存储中为您的证书存储或加载密钥,并且因为configuration文件不可用,所以encryption上下文不可用。 请注意,“ Load User Profile
设置仅适用于用户帐户。 像NETWORK SERVICE和ApplicationPoolIdentity这样的服务帐户有特殊的处理。
在IIS池中设置LoadUserProfile时会发生什么?
那么,用户configuration文件被加载。 这包括他们的encryption存储,诸如%TEMP%等环境variables。
最终归结到的是当AppPool启动时, LoadUserProfile
被IIS调用。
会有什么负面影响?
它可能会破坏与在IIS 6上运行的应用程序的向后兼容性,该应用程序未加载用户configuration文件。 环境variables被加载。 例如,当Load User Profile为true时,%TEMP%环境variables为C:\Users\AccountName\AppData\Local\Temp
(例如)。 如果为false, C:\WINDOWS\Temp
。