提问者:小点点

当我设置IIS池的LoadUserProfile时,会发生什么情况?


我面临以下问题。

我运行下面的代码

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时会发生什么以及可能会产生什么后果。我的意思是,如果这是一件“好”的事情,那么为什么默认情况下它不是“开”的,为什么它毕竟在那里?

当我在IIS池中设置LoadUserProfile时,会发生什么情况?它会产生什么负面后果?


共1个答案

匿名用户

我的意思是,如果这是一件“好”的事情,那么为什么它没有默认“打开”,为什么它毕竟在那里?

IIS 6 从不加载用户配置文件。我假设默认情况下这是关闭的,以保持行为一致,并且管理员必须选择加入它。

我尝试为应用程序池启用 LoadUserProfile 并且现在可以工作了。

这很可能是因为Windows加密服务提供程序试图在用户存储中存储或加载您的证书的密钥,并且由于配置文件不可用,加密上下文不可用。请注意,< code >加载用户配置文件设置仅适用于用户帐户。像NETWORK SERVICE和ApplicationPoolIdentity这样的服务帐户有特殊的处理方式。

当我在IIS池中设置LoadUserProfile时到底会发生什么

好吧,用户配置文件已加载。这包括他们的加密存储、环境变量(如 %TEMP%)和其他变量。

最终归结为LoadUserProfile在Apppool启动时由IIS调用。

它会产生什么负面影响?

它可能会破坏与运行在IIS 6上的应用程序的向后兼容性,该应用程序未加载用户配置文件。将加载环境变量。例如,当Load User Profile为true时,%TEMP%环境变量为C:\Users\AccountName\AppData\Local\TEMP(例如)。如果为false,则为C:\WINDOWS\Temp