2008-09-06 17 views
8

Ich schreibe (in C# mit .NET 3.5) eine administrative Anwendung, die mehrere Windows-Systeme für verschiedene Bits von Daten abfragt. In vielen Fällen wird WMI verwendet, in manchen Fällen muss es jedoch möglicherweise die Remote-Registrierung lesen oder einen Befehl oder ein Skript über das abgefragte System ausführen. Diese Abfrage wird in wiederholten Intervallen durchgeführt - normalerweise nachts, kann aber so konfiguriert werden, dass sie öfter (oder weniger) häufig geschieht. So könnte die Umfrage so oft wie alle 10 Minuten oder so selten wie einmal im Monat geschehen. Es muss auf automatisierte Weise geschehen, ohne menschlichen Eingriff.Speichern von Windows-Passwörtern

Diese Funktionen erfordern Administratorzugriff auf die abgefragten Systeme. Jetzt erwarte ich, dass es in den meisten Anwendungsfällen eine Domain geben wird und die Polling-Anwendung als Dienst mit Domain-Admin-Rechten (oder gleichwertigen Rechten) ausgeführt werden kann, was bedeutet, dass ich mich nicht um die Speicherung von Passwörtern kümmern muss Die App definiert den Benutzernamen/das Passwort des Dienstes über Standard-Windows-Mechanismen.

Aber es gibt immer ein paar schwarze Schafe da draußen. Das Programm kann in Nicht-Domänen-Umgebungen ausgeführt werden oder in Fällen, in denen einige abgefragte Systeme nicht Mitglieder der Domäne sind. In diesen Fällen müssen wir einen Benutzernamen und ein Passwort definieren, sie sicher speichern und dann dieses Benutzer/Pass-Paar aufrufen, wenn wir dieses System abfragen. Also denken Sie daran - in diesem Fall ist das Programm geschrieben ist der Benutzer wer sendet Passwort an das Authentifizierungssystem.

Ich bin nicht sicher, ob ich einen reversiblen Hash verwenden muss, den ich dann zum Zeitpunkt der Verwendung in Klartext entschlüssle, oder ob es einen Windows-Mechanismus gibt, der es mir erlaubt, den Hash zu speichern und dann wiederzuverwenden. Offensichtlich ist der zweite Mechanismus vorzuziehen; Ich möchte mein Programm entweder nie kennen den Klartext-Wert des Passworts, oder kenne es für die kürzest mögliche Zeit.

Ich brauche Vorschläge für intelligente und sichere Wege, dies zu erreichen.

Danke fürs schauen! hier

+0

mögliche Duplikate von [Wie Passwörter in WinForms-Anwendung zu speichern?] (Http://StackOverflow.com/Questions/40853/How-To-Store-passwords-in-winforms-application) – BalusC

Antwort

6
+0

1800 INFORMATION schlug DPAPI CryptProtectData in C++. Sieht so aus, als wäre der .NET-Ausdruck der Klasse [ProtectedData] (http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx) in [System.Security.Cryptography] (http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx) Namespace. Entschuldigung, ich habe vorher nicht erwähnt - ich codiere in C#. Wird die Frage bearbeiten, um dies zu reflektieren. Dies ist wahrscheinlich die Lösung für mein Problem, aber ich werde diese Frage (als unbeantwortet) noch ein paar Tage kochen lassen, um andere mögliche Lösungen zu generieren. – quux

0

Nun scheint es, dass Ihr Programm einen anderen Benutzer als der Kontext verkörpern muss, unter denen es bereits ausgeführt wird. Obwohl es wie ein ziemlich automatisierter Prozess aussieht, aber wenn nicht, können Sie den Administrator nicht einfach bitten, Benutzernamen und Passwort einzugeben, wenn dieser "Schwarzschaf" -Computer abgefragt wird?

+0

Vaibhav: Nein, weil das Polling-Programm wahrscheinlich nachts läuft, wenn kein Benutzer da ist. Das Abrufprogramm könnte möglicherweise Hunderte oder Tausende von entfernten Systemen nach den gesuchten Daten abfragen; Betrachten Sie es als ein Enterprise Computer Inventory Tool. – quux