2009-07-08 69 views
0

我在IIS7中有一些站點配置爲以域用戶身份運行(MYDOMAIN \ someuser)。Microsoft.Web.Administration.ServerManager無法讀取在applicationHost.config中包含加密密碼的配置節

我使用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

IIS對其模式中標記爲「encrypted = true」的屬性使用加密。同樣在它的模式中,它定義了用於加密的提供程序(請參閱C:\ Windows \ System32 \ inetsrv \ config \ schema \ IIS_Schema.xml),在虛擬目錄內使用密碼的情況下,它使用AesProvider ApplicationHost.config中的configProtectedData節。

在那裏,您將能夠看到您需要授予您想要解密的帳戶的權限的KeyContainerName,出於安全原因,默認情況下只包括管理員。

這將我帶入我的問題,如果你的代碼失敗我猜你已經授予ApplicationHost.config對非管理員用戶的訪問權,是這種情況嗎? 如果是這樣,那麼我會建議確保這不會爲您的環境打開安全風險。