在服务器上安全地加密/解密appsettings.json

Erg*_*wun 9 encryption connection-string asp.net-core

如何保护用于加密Web应用程序中敏感数据的加密密钥appsettings.json

我想保护我的Web应用程序配置中的敏感数据.

在ASP.NET MVC4应用程序中,我们这样做:

  1. 敏感数据(例如连接字符串中的密码)不会直接添加到web.config(或web.prod.config等),而是写入占位符变量.
  2. 在部署时,我们的部署服务(Octopus)将从其安全存储中检索敏感数据并覆盖该中的变量web.config.
  3. 然后,部署过程将使用加密web.config的敏感部分aspnet_regiis.exe.

现在我们正在使用ASP.NET Core,我们正在遵循的过程有点不同.

  1. appsettings.json 保存敏感数据的占位符变量,类似于web.config之前的工作方式.
  2. 部署过程像以前一样用来自其安全存储的敏感数据替换占位符.
  3. 而不是使用aspnet_regiis,我相信我需要:

    a)制作我自己的自定义工具来加密appsettings.json文件的各个部分.

    b)创建一个可以解密(全部/部分)的自定义配置提供程序 appsettings.json

我不明白的是如何保护用于(a)和(b)的加密密钥.旧方法利用服务器的机器密钥来加密文件.

我试图减轻的威胁是有人获得访问appsettings.json服务器并从中读取敏感数据(例如数据库密码等)

我也对使用这种方法来缓解这种威胁和/或其他问题的其他方法感兴趣.

Dmi*_*try 2

如果您不“信任”服务器 - 您就无法保护存储在该服务器内的“秘密”。

解释:

无论您发明什么“安全”(=不安全)方案 - 当应用程序启动时都必须能够将秘密“解密”为某种“可用”形式。

这意味着“解密”所需的所有“密钥”(证书等)必须存在于该服务器上并且可供应用程序访问(否则应用程序无法启动)。

这意味着访问服务器和应用程序的一些坏人也可以访问其上的所有“密钥”,并“解密”您的秘密。可能是通过复制文件,可能是通过反编译您的应用程序,可能是转储您的应用程序内存 - 但它可以。

没有绝对的保护。

  • 是的,我明白你的意思,但仍然觉得在 appsettings.json 中加密秘密是值得的,因为[这个问题]的接受答案中的所有原因(/sf/ask/729196751/ 177018)。例如,当攻击者仅具有对服务器或配置文件的部分访问权限时。在 ASP.NET Core 中存储该场景中的密钥的最佳/最实用的方法是什么,以便使用机器密钥为 aspnet_regiis 提供类似级别的保护? (2认同)