C#connectionString加密问题

时间:2010-05-20 14:25:19

标签: c# encryption

我正在学习如何为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该提供商。我们何时以及如何提供加密密钥?

  3. 感谢,

4 个答案:

答案 0 :(得分:3)

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

%FRAMEWORKDIR%\%FRAMEWORKVERSION%\CONFIG

How To: Configure MachineKey in ASP.NET 2.0 :此链接包含有关配置配置密钥<machineKey validationKey="[generated value here]"
decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" decryption="Auto" />
以及如何在计算机之间共享的部分。

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

  2. 分发原始机器密钥,以便在其他机器上使用
  3. 请参阅此MSDN指南 - http://msdn.microsoft.com/en-us/library/dtkwfdky.aspx

  4. ,而不是逐步转录如何使用RSA加密密钥。