我在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上。
答案 0 :(得分:0)
IIS对其架构中标记为“encrypted = true”的属性使用加密。同样在其模式中,它定义了用于加密的提供程序(请参阅C:\ Windows \ System32 \ inetsrv \ config \ schema \ IIS_Schema.xml),对于虚拟目录中的密码,它使用AesProvider,它定义于ApplicationHost.config中的configProtectedData部分。
在那里,您将能够看到为您希望能够解密的任何帐户授予权限所需的KeyContainerName,出于安全原因,默认情况下仅包括管理员。
这引出了我的问题,如果您的代码失败,我会猜测您已授予对不是管理员的用户的ApplicationHost.config访问权限,是这种情况吗? 如果是这样,那么我建议确保这不会为您的环境带来安全风险。