加密web.config连接字符串时,密钥存储在哪里?

时间:2014-04-09 08:06:05

标签: c# asp.net encryption configuration cryptography

在加密web.config中的连接字符串时,密钥存储在哪里?

此外,更改连接字符串凭据时是否需要重新编译?

3 个答案:

答案 0 :(得分:2)

根据this documentation,您在加密配置时有两个提供程序:

  • RSAProtectedConfigurationProvider
  • DPAPIProtectedConfigurationProvider

我对DPAPI知之甚少,所以我不能说赞成或反对它。当我考虑使用web.config的加密时,我选择了RSA并定义了其他CSP来保存我的RSA加密密钥。您可以在configProtectedData元素中的machine.config中设置它。

上述页面介绍并指导您如何使用RSAProtectedConfigurationProvider加密web.config部分。使用此提供程序时,您有两个选项

  • 计算机级容器(RSA密钥将存储在 \ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys
  • 用户级密钥容器(RSA密钥将存储在 \ Documents and Settings {UserName} \ Application Data \ Microsoft \ Crypto \ RSA

该指南随后介绍了如何使用 Aspnet_Regiis.exe 工具和RSAProtectedConfigurationProvider来加密配置文件的各个部分。

回答你的第二个问题。您不需要重新编译应用程序,但您必须解密该部分(连接字符串),更改凭据并再次加密该部分。或者用新的web.config替换web.config并再次加密。

请注意,在加密某个部分时,您必须在与web.config相同的计算机上拥有加密密钥。该指南提到了如何从一台计算机导出RSA密钥并将其导入另一台计算机以便在Web场中使用。

但是考虑一下这个问题:当你的应用程序可以解密web.config时(因为它必须在使用连接字符串之前完成),那么任何人都可以这样做(如果他可以到达机器)。我知道使用密钥的权限可以设置等等但是恕我直言,在连接字符串中使用密码是错误的做法。

最后一件事。上面指南中提到的 Aspnet_Regiis.exe 工具只能加密web.config。如果您有app.config并想加密它,请查看this SO question

答案 1 :(得分:0)

我可以回答第二个问题,但不是第一个问题。

更改连接字符串凭据时不需要重新编译,因为web.config是动态加载的。

答案 2 :(得分:0)

您可以将它存储在任何您想要的位置,而不是存储在web.config中。 建议:
1.在不同的配置文件中 2.注册表。
3.硬编码。

我可能会选择第一个选项。