我面临以下问题.

我运行以下代码

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

所以我在谷歌上搜索了一下,找到了this answer个类似的问题.我try 为应用程序池启用LoadUserProfile,现在它可以工作了.

问题是我不知道当我设定LoadUserProfile的时候会发生什么,以及可能产生什么后果.我的意思是,如果这是一个"好"的东西,那么为什么它在默认情况下不"开",为什么它毕竟存在?

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

推荐答案

我的意思是,如果它是一件"好"的事情,那么为什么它在默认情况下不是"打开"的,到底为什么它会在那里呢?

IIS 6从未加载用户配置文件.我假设默认情况下关闭此选项以保持行为一致,管理员必须 Select 加入.

我try 为应用程序池启用LoadUserProfile,现在它起作用了.

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

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

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

最终归结为LoadUserProfile是在AppPool启动时由IIS调用的.

它会有什么负面后果呢?

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

.net相关问答推荐

为什么在WinForm应用程序中创建组件类椭圆会在www.example.com中没有响应

实体框架核心:Azure容器应用程序的执行超时已过期

从没有流的EventStore中读取流不存在异常

ASP.NET核心最小API必须以正斜杠开头吗?

如何在 Windows 窗体上显示 ClickOnce 版本号

在.NET C#中截断整个单词的字符串

为什么 SortedSet.GetViewBetween 不是 O(log N)?

为 XML 编码文本数据的最佳方法

为什么我得到 411 Length required 错误?

如何判断一个类型是否是简单类型?即持有一个单一的价值

如何等到远程 .NET 调试器附加

Linq查询分组并 Select 第一个项目

如何通过 LINQ 比较没有时间的 DateTime?

将双精度转换为带有 N 个小数的字符串,点作为小数分隔符,并且没有千位分隔符

DBNull 的意义何在?

如何遍历字典并更改值?

基于多个字符分隔符拆分字符串

DLL 中有什么以及它是如何工作的?

如何在 nuspec 中指定特定的依赖版本?

表单不响应 KeyDown 事件