C#connectionString加密问题

我正在学习如何为我们的C#(3.5)应用程序加密ConnectionString。 我阅读了关于保护连接字符串的.Net Framwork开发人员指南( http://msdn.microsoft.com/en-us/library/89211k9b(VS.80).aspx )。 但没有完全理解内容。

  1. 它说“ The connection string can only be decrypted on the computer on which it was encrypted." 我们有一个发布机器,它将构建我们的应用程序,它将生成OurApp.exe.config,然后将其安装到许多产品机器上。 那是不是我们必须将这个加密过程与我们的应用程序分开并在单独的产品机器上运行?

  2. 我们可以使用“ RSAProtectedConfigurationProvider ”。 它提到我们需要该提供商的encryption key 。 何时以及如何提供加密密钥?

谢谢,

您只需运行一次加密过程。 但是,在生成计算机密钥后,您需要在目标计算机中的所有machine.config文件中传播该密钥。 machine.config应该位于:

  %FRAMEWORKDIR%\%FRAMEWORKVERSION%\ CONFIG 

如何:在ASP.NET 2.0中配置MachineKey :此链接包含有关配置配置密钥 decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" decryption="Auto" /> decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" decryption="Auto" /> decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" decryption="Auto" />以及如何在机器之间共享。

1)是的,如果您使用这种方法,您将按照安装它的机器对其进行加密。 如果你每台机器都有不同的配置,这将是我的exp的正常方法。 如果您尝试发送“秘密”连接字符串,这不是一个好方法。

2)如果您还没有看到它,我认为本文将回答有关RSA提供商的问题… http://msdn.microsoft.com/en-us/library/ff650304.aspx

如果这是客户使用的应用程序,则需要提供连接信息:

注意事项:不要认为通过加密配置,您真正保护自己免受运行应用程序的用户的影响。 在某些时候,该字符串需要由应用程序解密才能用于连接到服务器。 可以利用该应用程序来提供与其他应用程序的连接。 简而言之,您不应该依赖此作为将用户排除在数据库之外的唯一策略。 良好的安全性始终是一项多方面的努力。

有两种固定钥匙的方法(实际上是一种,但是在工具的初始点火之后它们朝向不同的方向)。

  1. 使用DPAPI和机器的实际密钥。 在某些方面,这是更安全的,因为没有人知道密钥。 导出密钥也很痛苦,因此您可以将其放在服务器场中的其他计算机上。 唯一的另一种方法是必须为服务器场中的每个服务器维护单独的连接字符串。 这可以做到,但它是非常kludgy。 如果你走这条路线,从配置文件中分离出连接字符串,这样你仍然可以在所有服务器上更新配置,但不能敲击连接字符串。 想想看,无论如何这是一个好主意。
  2. 设置一个自定义的机器密钥(谷歌,因为那里有可以创建密钥的生成器),然后在配置文件中提供。 然后,您可以轻松共享密钥。

希望这可以帮助。

  1. 配置使用机器密钥加密。 这意味着只有具有该密钥的计算机才能解密它。 最简单的方法是使用未加密的配置部署它,然后在软件运行时加密它,或使用单独的进程加密配置。 您可以使用上面的code4life的答案分发原始机器密钥以便在其他机器上使用

  2. 而不是逐步转录如何使用RSA加密密钥,请参阅此MSDN指南 – http://msdn.microsoft.com/en-us/library/dtkwfdky.aspx