搜索结果向我展示了很多关于"在哪里/如何存储服务器应用程序的加密密钥的问题"有人问过并回答。我不认为我觉得这些答案令人满意。
假设您正在托管一个asp.net Web应用程序,该应用程序管理某些密钥以保护数据库中的敏感数据。如果我是一个以某种方式获得访问Web服务器的攻击者,我只会下载并反编译.net应用程序的程序集。然后,一旦我弄清楚应用程序访问敏感数据的api调用,我将返回服务器并向应用程序添加一个aspx页面。 aspx页面将使用相同的apis集来查询数据库(即XyzRepository.GetAll()类型的调用)。然后,我的aspx页面会将解密的行转储到磁盘上。我的aspx页面甚至不关心解密发生的位置和方式。无论Web应用程序是否使用DPAPI来保护其密钥,无论是否使用受保护的配置,我都可以访问数据。因为我的aspx页面将在Web应用程序的上下文中运行(即它受益于相同的应用程序池标识,相同的机器密钥,同样的一切)。
当我想到这一点时,我倾向于相信,一旦有人侵入您的服务器,无论您在何处以及如何存储密钥,他们都将获取您的数据。从这个意义上说,我找到了关于主题妄想的先前问题的公认答案。我错过了什么吗?
而且,我想知道是否有办法配置IIS服务器,以便清除应用程序池,并且一旦将新代码添加到应用程序中,就永远不会重新启动它(即代码签名)检查整个Web应用程序,所有独立的aspx页面和dll)?
答案 0 :(得分:-1)
"安全"只能针对某种威胁来定义。
大多数基于加密的安全性都可以防止有人窃听您的通信。
如果我是以某种方式获得对Web服务器的访问权限的攻击者,那么......
这是一个更严重的威胁。针对它的常见保护是双重防火墙:
您的WebServer(IIS#1)为公众服务但无法访问数据库。它需要在第二个防火墙后面调用Application Server(IIS#2)。
aspx页面将使用相同的apis集来查询数据库(即XyzRepository.GetAll()类型的调用)
当API有这样的调用时,数据不被视为机密。