2009-07-08 13 views
0

Ich habe einige Websites in IIS7, die für die Ausführung als Domänenbenutzer (MYDOMAIN \ someuser) konfiguriert sind.Microsoft.Web.Administration.ServerManager kann keine Konfigurationsabschnitte mit verschlüsselten Kennwörtern in applicationHost.config lesen

Ich bin mit dem Microsoft.Web.Administration Namespace meine Serverkonfiguration scannen, aber es wirft eine Ausnahme, wenn ich eine dieser „Imitator“ -Seiten getroffen:

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() 
       } 
      } 
     } 
    } 
} 

Die tatsächliche Fehlermeldung lautet:

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 

Es scheint, dass IIS die MYDOMAIN \ einbenutzer Passwort in applicationHost.config verschlüsselt speichert, die in Bezug auf die Sicherheit ist sehr gut - aber ich habe keine Ahnung, wie die Servermanager bekommen diese zu entschlüsseln.

Irgendwelche Tipps, wie kann ich entweder ServerManager entschlüsseln lassen, oder einfach IIS sagen, um die Passwörter im Klartext zu speichern?

Dies ist übrigens auf IIS7 unter Windows 7 RC.

Antwort

0

IIS verwendet die Verschlüsselung für Attribute, die in seinem Schema als "verschlüsselt = wahr" markiert sind. In seinem Schema definiert es auch den Provider, der für die Verschlüsselung verwendet werden soll (siehe C: \ Windows \ System32 \ inetsrv \ config \ schema \ IIS_Schema.xml), im Falle des Passworts innerhalb des virtuellen Verzeichnisses verwendet es den AesProvider, der in definiert ist der Abschnitt configProtectedData in ApplicationHost.config.

Dort können Sie den KeyContainerName sehen, den Sie benötigen, um Berechtigungen für jedes Konto zu vergeben, das Sie entschlüsseln möchten, das aus Sicherheitsgründen standardmäßig nur Administratoren enthält.

Das führt mich zu meiner Frage, wenn Ihr Code fehlschlägt, würde ich vermuten, dass Sie Zugriff auf ApplicationHost.config einem Benutzer gewährt haben, der kein Administrator ist, ist das der Fall? Wenn das so ist, würde ich vorschlagen, sicherzustellen, dass dies keine Sicherheitsrisiken für Ihre Umgebung öffnet.