Freigeben über


Initialisierung des Benutzermodus

Verteilte Anwendungen (Client/Server) verwenden Sicherheitspakete , um authentifizierte Verbindungen abzurufen und Nachrichten auszutauschen. Die Anwendung ruft SSPI-Funktionen (Security Support Provider Interface) auf, die Funktionen zugeordnet werden, die von SSP/APs implementiert werden, und Funktionen, die von Benutzermodus-SSP/APs implementiert werden. Diese Zuordnung wird von der Sicherheitsanbieter-DLL (Secur32.dll oder Security.dll) durchgeführt, die dynamisch in die Client- und Serverprozesse geladen werden kann. Die DLL kann auch statisch mit Secur32.lib verknüpft werden. Sowohl die DLL als auch die LIB werden mit dem Microsoft Windows Software Development Kit (SDK) ausgeliefert.

Das Laden des Sicherheitspakets in den Client- oder Serverprozess wird vom System verarbeitet, wenn die SSP/AP-DLL, die das Sicherheitspaket enthält, ordnungsgemäß registriert ist.

Der Server beginnt mit dem Herstellen einer sicheren Verbindung mit einem Client, indem er einen Port überwacht und darauf wartet, dass ein Client eine Nachricht sendet. Der Client beginnt mit dem Herstellen einer sicheren Verbindung mit dem Server, indem die SSPI-Funktion InitializeSecurityContext (General) aufgerufen wird. Diese Funktion ist der SpInitLsaModeContext-Funktion des benutzerdefinierten Sicherheitspakets zugeordnet. SpInitLsaModeContext gibt ein Token an den Client zurück, der es an den Server weiterleitet.

Beim Empfang des Tokens vom Client ruft der Server die SSPI-Funktion AcceptSecurityContext (General) auf, die an die SpAcceptLsaModeContext-Funktion des Sicherheitspakets verteilt wird. Wenn die SpAcceptLsaModeContext-Funktion erfolgreich ist und keine weitere Verarbeitung zum Einrichten des Sicherheitskontexts erforderlich ist, sollte die Funktion STATUS_SUCCESS an den Aufrufer zurückgeben. Wenn zusätzliche Verarbeitung erforderlich ist, sollte die Funktion SEC_I_CONTINUE_NEEDED zurückgeben und ein Token an den Server zurückgeben. Der Server leitet das Token an den Client weiter, der InitializeSecurityContext (General) erneut aufruft.

Dieser Aufrufzyklus kann so oft wie nötig wiederholt werden, bis eine authentifizierte Verbindung hergestellt wird oder fehlschlägt. Wenn die Funktion SpAcceptLsaModeContext oder SpInitLsaModeContext während dieses Prozesses erfolgreich ist und keine weitere Verarbeitung zum Einrichten des Sicherheitskontexts erforderlich ist, sollte die Funktion STATUS_SUCCESS an den Aufrufer zurückgeben. Wenn zusätzliche Verarbeitung erforderlich ist, sollte die Funktion SEC_I_CONTINUE_NEEDED zurückgeben und ein Token an den Aufrufer zurückgeben, der für die Weiterleitung verantwortlich ist.

Das vom Sicherheitspaket implementierte Protokoll bestimmt, wie oft dieser Zyklus wiederholt wird. In Sicherheitspaketen, die die gegenseitige Authentifizierung mit drei Beinen unterstützen, lautet die Aufrufsequenz beispielsweise wie folgt:

  1. Der Client ruft ein Token durch Aufrufen von InitializeSecurityContext (General) ab und sendet es an den Server. Der Server ruft AcceptSecurityContext (Allgemein) beim ersten Mal auf und erhält ein Antworttoken zurück, das er an den Client sendet.
  2. Der Client verwendet das vom Server empfangene Token in einem zweiten Aufruf von InitializeSecurityContext (General) und erhält ein endgültiges Token zurück. Der Client sendet dieses Token an den Server.
  3. Der Server empfängt das in Teil 2 generierte Token, das er beim letzten Aufruf von AcceptSecurityContext (General) verwendet.

Wenn die Funktionen SpAcceptLsaModeContext und SpInitLsaModeContext erfolgreich sind und keine weitere Verarbeitung zum Einrichten des Sicherheitskontexts erforderlich ist, sollten die Funktionen STATUS_SUCCESS an den Aufrufer zurückgeben. Außerdem müssen SpAcceptLsaModeContext und SpInitLsaModeContexttrue zurückgeben, wenn das benutzerdefinierte Sicherheitspaket die Funktionen unterstützt, dievon SSP/APs im Benutzermodus implementiert werden. Der MappedContext-Wert wird nicht an die Anwendung zurückgegeben. sie wird von der LSA abgefangen.

Wenn MappedContexttrue ist, ruft der LSA die SpUsermodeInitialize-Funktion der SSP/AP-DLL auf. Diese Funktion stellt Tabellen mit Zeigern auf die Benutzermodusfunktionen bereit, die von jedem Sicherheitspaket implementiert werden. Die SpInstanceInit-Funktion jedes Pakets wird mithilfe der von SpUsermodeInitialize zurückgegebenen Funktionstabellen aufgerufen. SpInstanceInit empfängt eine Tabelle mit Zeigern auf LSA-Funktionen, die von Benutzermodus-SSP/APs aufgerufen werden.