共用方式為


安全性概觀

Windows Web 服務 API (WWSAPI) 中的安全性架構提供:

  • 使用傳輸安全性來確保訊息完整性、機密性、重播偵測以及伺服器驗證。
  • 透過SOAP訊息安全性或傳輸安全性進行用戶端驗證,例如安全性令牌驗證、憑證信任和撤銷檢查等。

安全性程序設計模型

安全性與 信道相關聯。 保護通道包含下列步驟。

  • 建立並初始化一或多個 安全性系結, 適合應用程式的安全性需求。
  • 建立 安全性描述,包含這些安全性系結。
  • 建立 信道服務代理(在用戶端),或者建立 聆聽器服務主機(在伺服器端),並傳入該安全性描述。
  • 執行 Open、Accept、Send、Receive、Close 等一般通道程式設計步驟。

根據提供的安全性描述,通道上的訊息在執行時環境中發送和接收時會自動加以保護。 您可以選擇性地在安全性描述中指定一或多個 通道範圍安全性設定,或在安全性系結中指定一或多個 系結範圍安全性設定,來微調這些步驟。

應用程式必須使用附加在每封已接收訊息中的 安全性處理結果,來執行對發送者身分的任何必要授權。 授權步驟不會在安全性描述中指定,也不會由運行時間自動執行。

安全性描述中的錯誤,例如不支援的系結、無法套用的屬性/欄位、缺少必要的屬性/欄位或無效的屬性/域值,會導致通道或接聽程式建立失敗。

選取安全性系結

設計應用程式安全性時,主要的決策是選擇要包含在安全性描述中的安全性綁定。 以下是選擇適合應用程式安全性案例之安全性系結的一些指導方針。 實用的啟發學習法是先瞭解哪些安全性認證類型(例如 X.509 憑證Windows 網域使用者名稱/密碼應用程式定義的使用者名稱/密碼)可供應用程式使用,然後選擇可使用該認證類型的安全性系結。

通道和安全性

如上所述,安全性的範圍限於各個頻道。 此外,通道操作會一致對應至所有安全綁定的安全步驟。

  • 通道建立:驗證安全性描述中指定的一組安全性系結,之後會維持通道的固定狀態。 也會決定通道堆疊的形狀,包括用於 WS-Trust 型交涉的任何側邊通道。
  • 通道開啟:任何作為安全綁定一部分提供的認證都已載入,且安全會話已建立。 一般而言,開放式通道包含「即時」安全性狀態。 開啟客戶端通道同時也會指定伺服器的端點位址,而執行時將會針對該端點位址進行伺服器驗證。
  • 在通道開啟和關閉之間:在此階段可以安全地傳送和接收訊息。
  • 訊息傳送:安全性內容令牌會視需要取得或更新,且安全性會根據安全性描述套用至每個傳輸的訊息。 套用安全性時發生的錯誤會以傳送錯誤的形式傳回應用程式。
  • 訊息接收:每個收到的訊息會根據安全性描述進行驗證。 任何訊息安全性驗證錯誤會當做接收錯誤傳回給應用程式。 這些個別訊息錯誤不會影響通道狀態或後續接收。 應用程式可能會捨棄失敗的接收,並重新啟動另一則訊息的接收。
  • 通道中止:通道可以隨時中止,以停止通道上的所有 I/O。 在中止時,通道會進入錯誤狀態,且不允許再傳送或接收。 不過,通道仍可能會保留一些「即時」安全性狀態,因此後續的通道關閉將需要清除所有狀態。
  • 通道關閉:開啟時建立的安全性狀態已被釋放,會話被結束。 安全性內容令牌已取消。 通道堆疊會維持不變,但不包含「即時」安全性狀態或已載入的認證。
  • 通道釋放:在建立時所建置的通道堆疊與所有安全性資源會一同被釋放。

安全 API

安全性的 API 檔會分組為下列主題。

安全

使用 WWSAPI 安全性 API 時,應用程式面臨數個安全性風險:

意外設定錯誤

WWSAPI 支援一系列與安全性相關的組態選項。 請參閱 WS_SECURITY_BINDING_PROPERTY_ID範例。 其中一些選項,例如 WS_SECURITY_BINDING_PROPERTY_ALLOW_ANONYMOUS_CLIENTS 可讓應用程式降低各種安全性系結所提供的預設安全性層級。 應仔細評估這類選項的使用,以確保沒有任何產生的攻擊媒介。

此外,如上述所述,WWSAPI 可讓應用程式刻意停用完全保護訊息交換所需的特定步驟,例如允許停用加密,即使傳輸安全性認證也一樣。 這是為了啟用某些特定情境而被允許的,不應用於一般溝通。 WS_PROTECTION_LEVEL 必須特別降低才能啟用此案例,除非絕對必要,否則應用程式不應該變更該值,因為這樣做會停用許多旨在確保安全設定的檢查。

將機密資訊儲存在記憶體中

儲存在記憶體中的機密資訊,例如密碼,容易被具有特權的攻擊者透過例如頁面檔案的方法擷取。 WWSAPI 會複製提供的認證,並加密該複本,讓原始數據不受保護。 應用程式有責任保護原始實例。 此外,加密的複本會在使用時短暫地解密,並開啟視窗來擷取它。

拒絕服務

安全性處理可能會耗用大量資源。 每個額外的安全性系結都會增加這些成本。 WWSAPI 會在發生安全性驗證失敗時立即中止安全性處理,但在執行重大工作之前,可能不會進行某些檢查,例如授權決策。

在伺服器上處理訊息時,安全性狀態會儲存在訊息堆積上。 應用程式可以在安全性處理期間限制記憶體耗用量,方法是透過WS_MESSAGE_PROPERTY_HEAP_PROPERTIES減少該堆積的大小。 此外,某些安全性系結,例如WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING可能會導致伺服器代表用戶端配置資源。 這些資源的限制可以透過下列 WS_SECURITY_BINDING_PROPERTY_ID 值來設定:

  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_PENDING_CONTEXTS
  • 保安綁定屬性安全上下文最大活動上下文數
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_RENEWAL_INTERVAL
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_ROLLOVER_INTERVAL

將這些限制設定為較低的值可以減少最大記憶體使用量,但可能會導致在達到配額時拒絕合法的客戶端。