ASP.NET Core 数据保护系统注册表密钥环使用的默认注册表位置是什么

ASP.NET Core 数据保护系统注册表密钥环使用的默认注册表位置是什么

TL;DR;

当您在 IIS 中使用没有用户配置文件的工作进程帐户运行应用程序时,ASP.NET Core 数据保护系统将其密钥存储在哪个注册表配置单元中

看起来它正在重用 ASP.NET DPAPI 使用的配置单元,是吗?

我们正在设置一组需要协同工作的 asp.net core 应用程序,而防伪验证目前对 POST 请求造成了干扰。看起来ASP.NET core 需要配置数据保护以便所有应用程序都使用相同的密钥。

我们所有的应用程序当前都与一个池用户一起运行,该池用户既不是用户配置文件,也不是HKLM 注册表密钥环好像是可用的。

我们不允许为这些池用户激活用户配置文件,因此我们希望使用注册表。

在“使用 IIS 在 Windows 上托管 ASP.NET Core”文档的“数据保护”部分中这里我们发现,要在 IIS 下配置数据保护以保留密钥环,其中一种方法是使用来自 github 的 powershell 脚本创建数据保护注册表项这里

这个脚本的调用方式如下:

Provision-AutoGenKeys "4.0" "32" $poolSid

阅读此 powershell 脚本似乎它所做的就是在以下键上为池用户设置 ACL:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0\AutoGenKeys
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0\AutoGenKeys
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\ASP.NET\2.0.50727.0\AutoGenKeys
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\ASP.NET\4.0.30319.0\AutoGenKeys

这就是我完全感到困惑的地方......这些看起来像是 ASP.NET 加密的“旧”自动生成密钥的配置单元,而不是 ASP.NET Core......

所以,我想知道......微软是否会重复使用这些配置单元来进行 ASP.NET Core 数据保护?

或者我应该去别处看看?

答案1

ASP.NET Core 几乎可以在任何地方存储密钥:

  • 文件系统
  • Windows 注册表
  • IIS 用户配置文件(其中的密钥可以保留在 HKLM 注册表中的特殊注册表项中,该注册表项仅对工作进程帐户具有 ACL。密钥使用 DPAPI 进行静态加密)
  • Azure KeyVault,Azure 存储帐户
  • Azure 应用密钥(位于 %HOME%\ASP.NET\DataProtection-Keys)
  • SQL 存储
  • Redis 缓存
  • 用户配置文件(如果用户配置文件可用,则密钥位于 %LOCALAPPDATA%\ASP.NET\DataProtection-Keys 文件夹中,并使用适用于 Windows 的 DPAPI 进行静态加密)

因此您应该查看与您的案例/配置相对应的位置。

答案2

实践才能证明事实……

我做了一个简单的测试是的.NET CORE 数据保护系统重复使用旧的 ASP.NET AutoGenKeys 配置单元为了Microsoft.AspNetCore.数据保护.密钥管理。

在测试中,使用以下配置单元添加数据
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0\AutoGenKeys\S-1-5-21-1112422158-284577691-398547282-74630\DataProtection
在此处输入图片描述


更详细地说明我的测试:

  • 我有两个互相发布信息的简单.net 核心应用程序。
  • 每个应用程序都配置了自己的应用程序池。
  • 每个应用程序池配置相同的用户。
  • 该池用户没有用户配置文件且权限有限......

当我添加 AntiforgeryValidation(其底层使用 .net 核心数据保护)时,调用开始失败。

应用程序日志显示如下条目:

  • “使用内存存储库。密钥不会保存到存储中。”
  • “用户配置文件和 HKLM 注册表均不可用。使用临时密钥存储库。当应用程序存在时,受保护的数据将不可用。” 在此处输入图片描述

我一跑预配-AutoGenKeys.ps1powershell 脚本(来自https://github.com/aspnet/AspNetCore/blob/master/src/DataProtection/Provision-AutoGenKeys.ps1) 将 ACL 添加到旧的 ASP.NET AutoGenKeys 后,一切开始工作......不再有 HKLM 注册表不可用的警告。

因此,回答我自己的问题:是的.. .NET CORE 数据保护正在为 Microsoft.AspNetCore.DataProtection.KeyManagement 重用旧的 ASP.NET AutoGenKeys 配置单元。

相关内容