Sdílet prostřednictvím


Inicializace uživatelského režimu

Distribuované aplikace (klient/server) používají balíčky zabezpečení k získání ověřených připojení a výměny zpráv. Aplikace volá funkce rozhraní SSPI (Security Support Provider Interface), které jsou mapovány na funkce implementovanéZSP/APs a funkce implementované zprostředkovatelem zabezpečení v uživatelském režimu /APS. Toto mapování provádí knihovna DLL zprostředkovatele zabezpečení (Secur32.dll nebo Security.dll), která se dá načíst do procesů klienta a serveru dynamicky. Knihovnu DLL lze také staticky propojit pomocí knihovny Secur32.lib. Knihovna DLL i knihovna LIB se dodávají se sadou Microsoft Windows Software Development Kit (SDK).

Načtení balíčku zabezpečení do procesu klienta nebo serveru je zpracováno systémem, pokud je knihovna DLL ZSP/AP obsahující balíček zabezpečení správně zaregistrována.

Server zahájí proces získání zabezpečeného připojení s klientem monitorováním portu a čekáním na odeslání zprávy klientem. Klient zahájí proces získání zabezpečeného připojení k serveru voláním funkce SSPI InitializeSecurityContext (Obecné). Tato funkce je mapována na vlastní balíček zabezpečení SpInitLsaModeContext funkce. SpInitLsaModeContext vrátí token klientovi, který ho předá na server.

Po přijetí tokenu z klienta server volá funkci SSPI AcceptSecurityContext (Obecné), která je odeslána do SpAcceptLsaModeCon text funkce. Pokud SpAcceptLsaModeContext funkce uspěje a k navázání kontextu zabezpečení není potřeba žádné další zpracování, měla by funkce vrátit STATUS_SUCCESS volajícímu. Pokud je vyžadováno další zpracování, funkce by měla vrátit SEC_I_CONTINUE_NEEDED a vrátit token na server. Server předá token klientovi, který znovu volá InitializeSecurityContext (Obecné).

Tento volající cyklus se může opakovat tak často, jak je to nutné, dokud se nenaváže ověřené připojení nebo selže. Pokud během tohoto procesu SpAcceptLsaModeContext nebo SpInitLsaModeContext funkce uspěje a k navázání kontextu zabezpečení by funkce měla vrátit STATUS_SUCCESS volajícímu. Pokud je vyžadováno další zpracování, funkce by měla vrátit SEC_I_CONTINUE_NEEDED a vrátit token volajícímu, který je zodpovědný za jeho přesměrování.

Protokol implementovaný balíčkem zabezpečení určuje, kolikrát se tento cyklus opakuje. Například v balíčcích zabezpečení, které podporují vzájemné ověřování se třemi nohama, je volající sekvence následující:

  1. Klient získá token voláním InitializeSecurityContext (Obecné)a odešle ho na server. Server volá AcceptSecurityContext (Obecné) poprvé a vrátí token odpovědi, který odešle klientovi.
  2. Klient používá token přijatý ze serveru v druhém volání InitializeSecurityContext (Obecné)a získá zpět konečný token. Klient odešle tento token na server.
  3. Server obdrží token vygenerovaný v noze 2, který používá při posledním volání AcceptSecurityContext (Obecné).

Pokud SpAcceptLsaModeContext a SpInitLsaModeContext funkce úspěšné a k navázání kontextu zabezpečení není potřeba žádné další zpracování, měly by funkce vrátit STATUS_SUCCESS volajícímu. Kromě toho platí, že pokud vlastní balíček zabezpečení podporuje funkce implementované zprostředkovatelem zabezpečení v uživatelském režimu, SpAcceptLsaModeContext a SpInitLsaModeContext musí vrátit TRUEMappedContext parametru. Hodnota MappedContext se nepředá zpět do aplikace; zachytí ji LSA.

Při mappedContext je true, LSA volá knihovnu DLL ZSP/AP SpUsermodeInitialize funkce. Tato funkce poskytuje tabulky ukazatelů na funkce uživatelského režimu implementované jednotlivými balíčky zabezpečení. Volá se funkce SpInstanceInit každého balíčku pomocí tabulek funkcí vrácených SpUsermodeInitialize. spInstanceInit obdrží tabulku ukazatelů na funkce LSA volané poskytovatelem sdílených služeb v uživatelském režimu /APs.