【问题标题】:encrypted app.config fails on deployed machine已部署计算机上的加密 app.config 失败
【发布时间】:2011-05-02 22:00:57
【问题描述】:

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

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

加密有效,我可以在本地开发盒上运行它,但是当我尝试在新机器上移动它时它失败了。

我是否需要在我的应用程序中执行额外的步骤才能使用加密设置?

【问题讨论】:

    标签: c# encryption


    【解决方案1】:

    你需要在目标机器上运行aspnet_regiis -pe命令来加密配置文件。该应用程序可以在本地机器上运行,因为您在这台机器上运行了该命令。

    【讨论】:

    • 如果我在客户端机器上没有访问权限怎么办?我已经构建了一个应用程序并将其打包。我希望最终用户能够自己运行设置。
    • 您需要获取服务器密钥。看看this article
    • 我仍然对将 RSA 密钥导出/导入到另一台机器的意义感到困惑,这样做不会让用户自己也使用解密命令?
    【解决方案2】:

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

    如果您无权访问终端机器,那么您将无法进行有效加密,您将始终放弃私钥以允许对字符串进行解密 - 然后您只是在做安全工作通过不起作用的默默无闻。

    【讨论】:

    • 好的,所以我理解正确。 (在我的情况下,我使用的是 installsheild)我会在没有任何加密的情况下打包应用程序,在安装期间我会创建一个调用“aspnet_regiis -pe”的自定义操作?对吗?
    • 是的,除了我不会掏空并调用 aspnet_regiis 之外,看看这个 stackoverflow.com/questions/21965/… 将有助于通过框架 api 完成它。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 2014-12-05
      • 2018-03-16
      • 2022-12-20
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多