Initialisierung des Benutzermodus
Verteilte Anwendungen (Client/Server) verwenden Sicherheitspakete zum Abrufen authentifizierter Verbindungen und zum Austauschen von Nachrichten. Die Anwendung ruft SSPI-Funktionen (Security Support Provider Interface) auf, die Funktionen zugeordnet sind, die von SSP/APsimplementiert werden, und Funktionen, die von SSP/APs im Benutzermodusimplementiert werden. Diese Zuordnung wird von der Sicherheitsanbieter-DLL (Secur32.dll oder Security.dll) ausgeführt, die dynamisch in den Client- und Serverprozess geladen werden kann. Die DLL kann auch mithilfe von Secur32.lib statisch 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 Prozess des Clients oder Servers wird vom System verarbeitet, wenn die SSP/AP-DLL, die das Sicherheitspaket enthält, ordnungsgemäß registriert ist.
Der Server beginnt mit dem Abrufen einer sicheren Verbindung mit einem Client, indem er einen Port überwacht, auf den ein Client wartet, um eine Nachricht zu senden. Der Client beginnt mit dem Abrufen einer sicheren Verbindung mit dem Server, indem die SSPI-Funktion InitializeSecurityContext (General)aufgerufen wird. Diese Funktion wird dem SpInitLsaModeContext--Funktion des benutzerdefinierten Sicherheitspakets zugeordnet. SpInitLsaModeContext ein Token an den Client zurückgibt, der es an den Server weiterleitet.
Beim Empfangen 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 erforderlich ist, um den Sicherheitskontext einzurichten, sollte die Funktion STATUS_SUCCESS an den Aufrufer zurückgeben. Wenn eine 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) aufruft, erneut.
Dieser Aufrufzyklus kann so oft wie nötig wiederholt werden, bis eine authentifizierte Verbindung hergestellt wird oder fehlschlägt. Wenn während dieses Vorgangs die SpAcceptLsaModeContext oder SpInitLsaModeContext- Funktion erfolgreich ist und keine weitere Verarbeitung erforderlich ist, um den Sicherheitskontexteinzurichten, sollte die Funktion STATUS_SUCCESS an den Aufrufer zurückgeben. Wenn eine 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 zuständig ist.
Das vom Sicherheitspaket implementierte Protokoll bestimmt, wie oft dieser Zyklus wiederholt wird. In Sicherheitspaketen, die die dreistufige gegenseitige Authentifizierung unterstützen, lautet die Aufrufsequenz z. B. wie folgt:
- Der Client ruft ein Token ab, indem InitializeSecurityContext (General)aufgerufen und an den Server gesendet wird. Der Server ruft AcceptSecurityContext (General) das erste Mal auf und ruft ein Antworttoken zurück, das an den Client gesendet wird.
- Der Client verwendet das vom Server empfangene Token in einem zweiten Aufruf von InitializeSecurityContext (General)und ruft ein endgültiges Token zurück. Der Client sendet dieses Token an den Server.
- Der Server empfängt das in Leg 2 generierte Token, das er im letzten Aufruf von AcceptSecurityContext (General)verwendet.
Wenn die SpAcceptLsaModeContext und SpInitLsaModeContext Funktionen erfolgreich ist und keine weitere Verarbeitung erforderlich ist, um den Sicherheitskontext einzurichten, sollten die Funktionen STATUS_SUCCESS an den Aufrufer zurückgeben. Wenn das benutzerdefinierte Sicherheitspaket die von SSP/APs im Benutzermodus implementierten Funktionen unterstützt, müssenSpAcceptLsaModeContext und SpInitLsaModeContextTRUE- mithilfe des MappedContext--Parameters zurückgeben. Der MappedContext- Wert wird nicht an die Anwendung übergeben; sie wird von der LSA abgefangen.
Wenn MappedContext-trueist, ruft die 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 SpUsermodeInitializezurückgegebenen Funktionstabellen aufgerufen. SpInstanceInit erhält eine Tabelle mit Zeigern auf LSA-Funktionen, die von SSP/APs im Benutzermodus aufgerufen werden,.