Microsoft.Web.Administration.ServerManager无法在applicationHost.config中读取包含加密密码的配置节

时间:2009-07-08 15:16:07

标签: iis-7 applicationhost config

我在IIS7中有一些配置为以域用户身份运行的网站(MYDOMAIN \ someuser)。

我正在使用Microsoft.Web.Administration命名空间来扫描我的服务器配置,但是当我点击其中一个“模仿”网站时它会抛出异常:

using (ServerManager sm = new ServerManager()) {
    foreach (Site site in sm.Sites) {
        foreach (Application app in site.Applications.Reverse()) {
            foreach (VirtualDirectory vdir in app.VirtualDirectories.Reverse()) {
                var config = app.GetWebConfiguration();
                foreach (var locationPath in config.GetLocationPaths()) {
                    // error occurs in GetLocationPaths()
                }
            }
        }
    }
}

实际的错误消息是:

COMException was unhandled 
Filename: \\?\C:\Windows\system32\inetsrv\config\applicationHost.config 
Line number: 279
Error: Failed to decrypt attribute 'password' because the keyset does not exist

似乎IIS正在存储在applicationHost.config中加密的MYDOMAIN \ someuser密码,这在安全性方面很好 - 但我不知道如何让ServerManager解密它。

有关如何允许ServerManager解密此问题的任何提示,或者只是告诉IIS以纯文本格式存储密码?

顺便说一下,这是在Windows 7 RC下的IIS7上。

1 个答案:

答案 0 :(得分:0)

IIS对其架构中标记为“encrypted = true”的属性使用加密。同样在其模式中,它定义了用于加密的提供程序(请参阅C:\ Windows \ System32 \ inetsrv \ config \ schema \ IIS_Schema.xml),对于虚拟目录中的密码,它使用AesProvider,它定义于ApplicationHost.config中的configProtectedData部分。

在那里,您将能够看到为您希望能够解密的任何帐户授予权限所需的KeyContainerName,出于安全原因,默认情况下仅包括管理员。

这引出了我的问题,如果您的代码失败,我会猜测您已授予对不是管理员的用户的ApplicationHost.config访问权限,是这种情况吗? 如果是这样,那么我建议确保这不会为您的环境带来安全风险。