当我设置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