2010-10-30 66 views
0

我创建了一个应用程序,需要app.config中的2个连接字符串和一些appSettings加密。加密的app.config在部署的机器上失败

我救了我的app.config为web.config文件并运行asp.net两个“的ConnectionStrings”和“的appSettings”

加密的作品,我可以在我的本地开发框运行ASPNET_REGIIS -pe命令然而,当我尝试在新机器上移动它时,它会失败。

在我的应用程序中使用加密设置需要做些额外的步骤吗?

回答

1

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

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

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

3

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

+0

如果我没有访问客户机,该怎么办?我已经构建了一个应用程序并将其打包。我希望最终用户能够自己运行设置。 – 2010-10-30 20:58:40

+0

您需要获取服务器密钥。看看[这篇文章](http://msdn.microsoft.com/en-us/library/ms998283.aspx#paght000006_webfarmscenarios)。 – 2010-10-30 21:00:48

+0

对于将RSA密钥导出/导入其他机器的问题,我仍然感到困惑,因为这样做不允许用户自己使用解密命令? – Sawd 2017-07-06 18:42:41

0

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

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

+0

好,所以我理解正确。 (在我的情况下,我正在使用installsheild)我会打包应用程序没有任何加密,在安装过程中,我会创建一个自定义操作,调用“aspnet_regiis -pe”?是对的吗? – 2010-10-30 21:29:41

+0

是的,除了我不会掏出并调用aspnet_regiis,看看这个http://stackoverflow.com/questions/21965/programmatically-encrypting-a-config-file-in-net这将有助于做到这一点通过框架api。 – 2010-10-30 21:37:47