0

我在 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 上。

4

1 回答 1

0

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

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

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

于 2010-05-23T03:35:30.187 回答