閱讀英文

共用方式為


使用者模式初始化

分散式(用戶端/伺服器)應用程式會使用 安全性套件, 取得已驗證的連線和交換訊息。 應用程式會呼叫安全性支援提供者介面 (SSPI) 函式,這些函式會對應至 SSP/APs 所實作的函式,以及由使用者模式 SSP/AP 實作的函式。 此對應是由安全性提供者 DLL 執行(Secur32.dll 或 Security.dll),可以動態載入客戶端和伺服器進程。 DLL 也可以使用 Secur32.lib 以靜態方式連結。 DLL 和 LIB 都隨附於 Microsoft Windows 軟體開發工具包 (SDK)。

如果已正確註冊包含安全性套件的 SSP/AP DLL,則會由系統處理將安全性套件載入客戶端或伺服器的進程。

伺服器會藉由監視埠,等候用戶端傳送訊息,開始取得與用戶端的安全連線的程式。 用戶端會藉由呼叫 SSPI 函式 InitializeSecurityContext (General),開始取得與伺服器的安全連線的程式。 此函式會對應至自定義安全性套件的 SpInitLsaModeContext 函式。 SpInitLsaModeContext 會將令牌傳回給用戶端,而用戶端會將令牌轉送至伺服器。

從用戶端接收令牌時,伺服器會呼叫 SSPI 函式 AcceptSecurityContext (一般),此函式會分派至安全性套件的 SpAcceptLsaModeContext 函式。 如果 SpAcceptLsaModeContext 函式成功,而且不需要再處理任何程式來建立安全性內容,函式應該會傳回STATUS_SUCCESS給呼叫者。 如果需要額外的處理,函式應該會傳回SEC_I_CONTINUE_NEEDED,並將令牌傳回至伺服器。 伺服器會將令牌轉送給用戶端,該用戶端會再次呼叫 InitializeSecurityContext (一般)

在建立或失敗驗證的連線之前,可能會視需要重複此呼叫迴圈。 在此程式中,如果 SpAcceptLsaModeContextSpInitLsaModeContext 函式成功,而且不需要再處理任何處理,才能建立 安全性內容,函式應該會傳回STATUS_SUCCESS給呼叫者。 如果需要額外的處理,函式應該傳回SEC_I_CONTINUE_NEEDED,並將令牌傳回給負責轉送它的呼叫端。

安全性套件所實作的通訊協議會決定重複此循環的次數。 例如,在支援三條腿相互驗證的安全性套件中,呼叫順序如下所示:

  1. 用戶端會藉由呼叫 InitializeSecurityContext (General)來取得令牌,並將它傳送至伺服器。 伺服器第一次呼叫 AcceptSecurityContext (一般),並取得它傳送給客戶端的回復令牌。
  2. 用戶端會在第二次呼叫中,使用從伺服器收到的令牌,InitializeSecurityContext (一般),並取回最終令牌。 用戶端會將此令牌傳送至伺服器。
  3. 伺服器會接收第 2 回合所產生的令牌,其會在最後一次呼叫 acceptSecurityContext (General) 中使用。

當spAcceptLsaModeContext SpInitLsaModeContext 函式成功,而且不需要再處理任何建立安全性內容時,函式應該會將STATUS_SUCCESS傳回給呼叫者。 此外,如果自定義安全性套件支持使用者模式 SSP/AP 所實作的函式,SpAcceptLsaModeContextSpInitLsaModeContext 必須 透過 mappedContext 參數傳 回 trueMappedContext 值不會傳回給應用程式;它被 LSA 攔截。

MappedContext為 true時,LSA 會呼叫 SSP/AP DLL SpUsermodeInitialize 函式。 此函式提供每個安全性套件所實作之使用者模式函式指標的數據表。 系統會使用spUsermodeInitialize spUsermodeInitialize 所傳回的函式數據表,呼叫每個封裝的 SpInstanceInit 函式。 SpInstanceInit 會接收使用者模式 SSP/AP 所呼叫之 LSA 函式的指標數據表。