建立 Schannel 安全性內容
若要建立 安全性內容 來保護用戶端與伺服器之間的通訊,兩者都必須參與下列資訊交換程式:
客戶
- 用戶端會呼叫 InitializeSecurityContext (一般) 函式。
- Schannel 會根據所選安全性通訊協議的規則開始建立安全性內容環境。 函式的傳回碼指出用戶端是否必須再次呼叫函式。 InitializeSecurityContext (一般) 可能會傳回代表上下文的令牌。
- 如果傳回令牌,用戶端會將它傳送至伺服器。
- 當 InitializeSecurityContext(一般) 傳回 SEC_E_OK 時,用戶端的操作就完成了。 如果函式傳回SEC_I_CONTINUE_NEEDED,客戶端必須等候伺服器傳送令牌。 當客戶端從伺服器取得令牌時,它必須再次呼叫InitializeSecurityContext(一般)函式。 (返回步驟 2.
伺服器
- 伺服器會等候用戶端傳送包含安全性令牌的訊息。 伺服器會將從用戶端收到的令牌傳遞至 AcceptSecurityContext (一般) 函式。
- 通道建置在令牌所代表的部分安全性內容上。 Schannel 會將令牌傳回至伺服器,並提供一個傳回碼,明確指出伺服器是否必須再次呼叫函數。
- 如果傳回令牌,伺服器會將它傳送至用戶端。
- 當 AcceptSecurityContext (一般) 傳回 SEC_E_OK 時,伺服器便完成其任務。 如果函式傳回SEC_I_CONTINUE_NEEDED,則伺服器必須等候用戶端傳送令牌。 當伺服器具有來自用戶端的令牌時,它必須再次呼叫 AcceptSecurityContext (一般) 函式。 (返回步驟 2.
如果任一函式傳回SEC_E_OK、SEC_I_CONTINUE_NEEDED或SEC_E_INCOMPLETE_MESSAGE以外的值,則發生錯誤。 用戶端和伺服器應該呼叫 DeleteSecurityContext 函式,以刪除部分建立的安全性內容。
修改客戶端和伺服器處理流程的特殊情況是,當對方傳送的資訊過少或過多至客戶端或伺服器時。 如果資訊太少,這兩個函式都會傳回SEC_E_INCOMPLETE_MESSAGE。 如需了解如何辨識和處理資訊不足或過多的情況,請參閱 Schannel 傳回的額外緩衝區。
相關主題