加密连接字符串会导致App Pool停止

时间:2015-11-30 14:06:29

标签: asp.net encryption web-config connection-string

我想在第一次运行代码时加密连接字符串。我从Global.asax调用下面的代码。

当我在我的机器上尝试此操作时,连接字符串是加密的,但是当我将它放在服务器上时会导致应用程序池停止。我无法解释为什么会发生这种情况,因为连接已重置。

这是文件写入设置的问题吗?如何在Web服务器上进行此操作?

var config = WebConfigurationManager.OpenWebConfiguration("~");
var section = config.GetSection("connectionStrings") as ConnectionStringsSection;

if (section == null)
{
    return;
}


if (section.SectionInformation.IsProtected)
{
    return;
}

section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");

config.Save();

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但我刚刚遇到它。

如果您在将web.config文件复制到Web服务器之前对本地计算机上的web.config中的连接字符串进行了加密,那么我认为这是问题。除非两台计算机都使用相同的IIS RSA密钥(我甚至不确定是否可能并且可能不太可能),否则目标计算机将无法解密连接字符串密码,因为它是使用源计算机密钥编码的。

因此,您必须从目标计算机本身加密web.config设置。

顺便说一句,我对你在这个问题上的评论感到困惑。调用config.Save()方法修改web.config文件,即使内容没有改变。在上面的示例代码中,内容应该已经更改,因为您在保存之前加密了connectionStrings部分。为了使IIS能够使用更新的web.config,它必须首先回收其应用程序池。这是部分原因,默认情况下,IIS会在检测到web.config更改时自动回收关联的应用程序池。