一尘不染

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

c#

我面临以下问题。

我运行以下代码

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池中进行设置时,究竟会发生什么,它会带来什么负面影响?


阅读 504

收藏
2020-05-19

共1个答案

一尘不染

我的意思是,如果这是一件“好事”,那么为什么默认情况下它不处于“开启”状态呢?为什么它在那里呢?

IIS 6从未加载用户配置文件。我会假设默认情况下禁用此选项以保持行为的一致性,并且管理员必须选择加入。

我尝试为应用程序池启用LoadUserProfile,并且现在可以使用。

这很可能是因为Windows加密服务提供程序试图在用户存储中存储或加载证书的密钥,并且由于配置文件不可用,所以加密上下文不可用。请注意,该Load User Profile设置仅适用于用户帐户。服务帐户(例如NETWORK SERVICE和ApplicationPoolIdentity)具有特殊处理。

在IIS池中设置LoadUserProfile时会发生什么情况

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

LoadUserProfile当AppPool启动时,IIS
最终将其归结为什么。

它会带来什么负面影响?

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

2020-05-19