我遇到了以下问题。
我运行以下代码
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
在两个过程中。其中一个进程在LOCAL_SYSTEM
下运行,这段代码成功了。另一个在IIS中以属于"Users“本地组的本地用户帐户运行,在那里我得到了以下异常:
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
所以我用谷歌搜索了一下,发现this answer也有类似的问题。我尝试为应用程序池启用LoadUserProfile
,现在它起作用了。
问题是,当我设置LoadUserProfile
时,我不知道到底发生了什么,以及它可能会产生什么后果。我的意思是,如果它是一件“好”的事情,那么为什么它在默认情况下不是“打开”的,为什么它会在那里呢?
当我在IIS池中设置LoadUserProfile
时,到底会发生什么,会有什么负面后果?
发布于 2013-06-17 22:19:43
我的意思是,如果它是一件“好”的事情,那么为什么它在默认情况下不是“打开”的,到底为什么它会在那里?
IIS 6从未加载过用户配置文件。我假设这在默认情况下是关闭的,以保持行为一致,并且管理员必须选择加入。
我尝试为应用程序池启用LoadUserProfile,现在它起作用了。
这很可能是因为Windows加密服务提供程序正在尝试在用户存储区中存储或加载证书的密钥,并且由于配置文件不可用,所以cryptographic context不可用。请注意,Load User Profile
设置仅适用于用户帐户。像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
。
https://stackoverflow.com/questions/17149132
复制相似问题