Benutzermodusinitialisierung
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 sind, die von SSP/APs implementiertwerden, und Funktionen, die von SSP/APs im Benutzermodus 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 lib werden mit dem Microsoft Windows Software Development Kit (SDK) bereitgestellt.
Das Laden des Sicherheitspakets in den Client- oder Serverprozess wird vom System durchgeführt, 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 und darauf wartet, dass ein Client eine Nachricht sendet. Der Client beginnt mit dem Abrufen einer sicheren Verbindung mit dem Server, indem er die SSPI-Funktion InitializeSecurityContext (Allgemein)aufruft. Diese Funktion wird der SpInitLsaModeContext-Funktion des benutzerdefinierten Sicherheitspakets zugeordnet. SpInitLsaModeContext gibt ein Token an den Client zurück, der es an den Server weiterleitet.
Nach dem Empfang des Tokens vom Client ruft der Server die SSPI-Funktion AcceptSecurityContext (Allgemein)auf, die an die SpAcceptLsaModeContext-Funktion des Sicherheitspakets gesendet 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 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 ein Fehler auftritt. 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 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 gegenseitige dreistufige Authentifizierung unterstützen, sieht die aufrufende Sequenz beispielsweise wie folgt aus:
- Der Client ruft ein Token durch Aufrufen von InitializeSecurityContext (Allgemein)ab und sendet es an den Server. Der Server ruft AcceptSecurityContext (Allgemein) zum ersten Mal auf und erhält ein Antworttoken zurück, das er an den Client sendet.
- Der Client verwendet das vom Server in einem zweiten Aufruf von InitializeSecurityContext (Allgemein)empfangene Token und ruft ein endgültiges Token ab. Der Client sendet dieses Token an den Server.
- Der Server empfängt das in Abschnitt 2 generierte Token, das er im letzten Aufruf von AcceptSecurityContext (Allgemein)verwendet.
Wenn die Funktionen SpAcceptLsaModeContext und SpInitLsaModeContext erfolgreich sind und keine weitere Verarbeitung erforderlich ist, um den Sicherheitskontext einzurichten, sollten die Funktionen STATUS _ SUCCESS an den Aufrufer zurückgeben. Wenn das benutzerdefinierte Sicherheitspaket außerdem die funktionen unterstützt, die von SSP/APs im Benutzermodus implementiert werden,müssen SpAcceptLsaModeContext und SpInitLsaModeContext TRUE über den MappedContext-Parameter zurückgeben. Der MappedContext-Wert wird nicht an die Anwendung übergeben. sie wird vom LSA abgefangen.
Wenn MappedContext true ist, ruft das LSA die SpUsermodeInitialize-Funktion der SSP/AP-DLL auf. Diese Funktion stellt Tabellen mit Zeigern auf die Benutzermodusfunktionen bereit, die von den einzelnen Sicherheitspaketen 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 SSP/APs im Benutzermodus aufgerufen werden.