.NET Framework提供了通过Protected Configuration API加密(部分)应用程序配置文件的功能。例如,您可以使用它来加密连接字符串,以便在配置文件中没有明文数据库的用户名和密码。
但加密后,必须解密才有用。
使用RsaProtectedConfigurationProvider可以利用Windows Cryptography Next Generation API(CNG)安全存储密钥,并使其仅供选定用户使用。或者,可以使用Windows Data Protection API(DPAPI)来做同样的事情。
由于这两种方法都是特定于用户的,而不是特定于应用程序(后者几乎不可能实现),用户可以编写一个在其帐户下运行的简单应用程序,解密配置文件并打印连接字符串从而泄露密码。
因此,当用户必须能够运行应用程序(换句话说,最广泛意义上的“桌面应用程序”)时,加密该应用程序的配置是没有意义的,因为该用户可以自己轻松解密配置。
那么加密用户计算机上安装的应用程序的配置是否有用,但不能直接由该用户运行?像Windows服务(或作为服务运行的Web服务器中托管的Web应用程序)?
这样,您可以授予服务帐户读取私钥的权限,但不能读取最终用户。当然,当用户具有管理权限时,他们可以授予自己阅读密钥的权限,我们将回到原点。
当配置文件可能以某种方式离开机器时可能会落入坏人之手,使其在该机器外部无法读取,因为密钥仅存储在该特定计算机上。
据我所知,加密配置在这两种情况下才有意义:
这是正确的,还是我的思路有缺陷?