用户配置文件和 HKLM 注册表均不可用。使用临时密钥存储库。应用程序退出时,受保护的数据将不可用

Posted

技术标签:

【中文标题】用户配置文件和 HKLM 注册表均不可用。使用临时密钥存储库。应用程序退出时,受保护的数据将不可用【英文标题】:Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailable when application exits 【发布时间】:2016-11-24 09:59:00 【问题描述】:

我有一个没有特殊设置 DataProtection 堆栈的 Asp.NET Core 应用程序 - 只是 AddMvc。虽然在 IISExpress/(Kestrel) 上一切正常,但在 IIS 服务器上我收到了这个错误:

11/23/2016 18:50:14:warn: Microsoft.AspNetCore.Session.SessionMiddleware[7]
      Error unprotecting the session cookie.
System.Security.Cryptography.CryptographicException: The key 6d00462a-ba7f-4f65-bb36-711605de93f2 was not found in the key ring.
   at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status)
   at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte[] protectedData, Boolean ignoreRevocationErrors, Boolean& requiresMigration, Boolean& wasRevoked)
   at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(Byte[] protectedData)
   at Microsoft.AspNetCore.Session.CookieProtection.Unprotect(IDataProtector protector, String protectedText, ILogger logger)
11/23/2016 19:27:34:warn: Microsoft.Extensions.DependencyInjection.DataProtectionServices[59]
      Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailable when application exits.
11/23/2016 19:27:34:warn: Microsoft.AspNetCore.DataProtection.Repositories.EphemeralXmlRepository[50]
      Using an in-memory repository. Keys will not be persisted to storage.
11/23/2016 19:27:34:warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key 27c3297d-c583-4de5-b619-489bfba62407 may be persisted to storage in unencrypted form.
11/23/2016 19:27:35:warn: Microsoft.AspNetCore.Session.SessionMiddleware[7]
      Error unprotecting the session cookie.
System.Security.Cryptography.CryptographicException: The key 3cbde8ae-2dba-4c84-ada3-20ba40bdff85 was not found in the key ring.
   at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status)
   at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte[] protectedData, Boolean ignoreRevocationErrors, Boolean& requiresMigration, Boolean& wasRevoked)
   at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(Byte[] protectedData)
   at Microsoft.AspNetCore.Session.CookieProtection.Unprotect(IDataProtector protector, String protectedText, ILogger logger)

仅在某些用户登录后才会发生,而不是每次都发生。 我尝试谷歌但没有成功。

可能是第二台服务器上的某些 IIS 配置不同?谢谢。

【问题讨论】:

刚刚回答了一个类似的问题here 你解决过这个问题吗? 我认为升级到 Asp.Net Core 2.0 后它不再存在 【参考方案1】:

这个问题源于 IIS 本身的一个错误,它可能会也可能不会 更正。为了解决此问题,您需要 编辑您的应用程序池以启用用户配置文件加载。一旦你设置 您的应用程序池以加载应用程序池的用户配置文件 身份,应用程序将有权读取和写入 符合预期的系统注册表。

原创article

简而言之,确保应用程序池加载用户配置文件:

下载 ps 脚本或其 .NET 模拟 here 像这样构建并以管理员身份运行它:

ProvisionAutoGenKeys.exe NetCoreAppPool

【讨论】:

以上是关于用户配置文件和 HKLM 注册表均不可用。使用临时密钥存储库。应用程序退出时,受保护的数据将不可用的主要内容,如果未能解决你的问题,请参考以下文章

电脑账户临时配置文件登录怎么还原?

分析恶意windows程序

windows services 读取注册表配置文件一般在哪个目录

powershell通过注册表路径判断系统是否需要重启

windows7开机提示您已使用临时配置文件登陆

即使具有管理员权限也无法读取/写入 HKLM 注册表项和值