已部署的计算机上加密的app.config失败

时间:2010-10-30 20:48:33

标签: c# encryption

我创建了一个应用程序,需要app.config中的2个连接字符串和一些appSettings进行加密。

我将app.config保存为web.config并为“connectionStrings”和“appSettings”运行asp.net aspnet_regiis -pe命令

加密工作正常,我可以在我的本地开发盒上运行它,但是当我尝试在新机器上移动它时它会失败。

我的应用程序中需要执行额外的步骤来使用加密设置吗?

3 个答案:

答案 0 :(得分:3)

您需要在目标计算机上运行aspnet_regiis -pe命令来加密配置文件。该应用程序在本地计算机上运行,​​因为您在此计算机上运行该命令。

答案 1 :(得分:1)

aspnet_regiis -pe使用数据保护API(也称为DPAPI)存储加密密钥,该API是特定于机器的。默认情况下,它将加密密钥存储在计算机存储中而不是用户存储中。 (例如,您不需要将aspnet_regiis作为将运行Web应用程序的用户运行,只需在同一个框中运行。)您需要在目标框上运行该命令,以便加密密钥正确存储在DPAPI中。您可以在此处找到更多信息:

http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx

如果您要在Web场方案中运行,则可能需要在所有计算机上使用相同的加密配置部分。因此,您需要跨机器共享加密密钥。上面的同一篇文章链接到RsaProtectedConfigurationProvider和有关跨机器共享密钥的信息。

答案 2 :(得分:0)

我们在我们的环境中执行此操作的方式是在MSI中将配置清除(它被标记化并且仅在安装时完全写入)然后我们有自定义操作来执行“aspnet_regiis -pe”活动(通过框架完成,但不使用命令行。)

如果您无法访问终端机器,那么您将无法进行有效加密,您将始终最终泄露私钥以允许解密字符串 - 然后您只是在做安全性通过默默无闻无效。