分散式應用程式安全性
Windows Communication Foundation (WCF) 安全性可細分為三項主要功能領域:傳輸安全性、存取控制以及稽核。 傳輸安全性提供完整性、機密性與驗證。 傳輸安全性是由下列其中一項提供:傳輸安全性、訊息安全性或 TransportWithMessageCredential
。
如需 WCF 訊息安全性的概觀,請參閱安全性概觀。 如需了解 WCF 安全性其他兩個部分的詳細資訊,請參閱授權和稽核。
傳輸安全性案例
採用 WCF 傳輸安全性的常見案例包含下列各項:
使用 Windows 保護傳輸。 WCF 用戶端及服務部署於 Windows 網域中 (或 Windows 樹系)。 由於訊息包含個人資料,因此要求會包括用戶端和服務的雙向驗證、訊息完整性及訊息機密性。 此外,特殊交易發生時需要證明,例如訊息接收者應記錄簽章資訊。
使用
UserName
和 HTTPS 保護傳輸。 WCF 用戶端和服務需要經過開發才能在網際網路中運作。 用戶端認證會根據使用者名稱/密碼組的資料庫進行驗證。 服務會使用受信任的安全通訊端層 (SSL) 憑證部署在 HTTPS 位址。 由於訊息會透過網際網路傳輸,因此用戶端和服務需要經過雙向驗證,而且必須維持傳輸期間訊息的機密性與完整性。使用憑證保護傳輸。 WCF 用戶端和服務需要經過開發才能透過公用網際網路運作。 用戶端和服務都有憑證,可以用來保護訊息的安全。 用戶端和服務會使用網際網路彼此通訊,以及執行要求有訊息完整性、機密性與雙向驗證的高價值交易。
完整性、機密性與驗證
完整性、機密性及驗證這三項功能合稱為傳輸安全性。 傳輸安全性所提供的各種功能,會協助減少分散式應用程式的威脅。 下表簡要說明構成傳輸安全性的這三項功能。
函式 | 描述 |
---|---|
完整性 | 「完整性」是指保證資料完整且正確,尤其是在資料從某個端點傳送到另一個端點,而且可能已有許多執行者讀取過之後。 完整性必須維持,才能避免資料竄改,而且通常是藉由訊息數位簽署達成這個目的。 |
保密 | 「機密性」是指保證訊息未被原本指定的讀者以外的人員讀取。 例如,信用卡號在透過網際網路傳送時必須保持其機密。 機密性通常是藉由使用公開金鑰/私密金鑰配置加密資料的方式提供。 |
驗證 | 「驗證」是指對宣告之身分識別的驗證。 例如,使用銀行帳戶時,必須只允許實際的帳戶擁有人提款。 驗證可藉由各種方法提供。 其中一種常見的方法是使用者帳號/密碼系統。 另一種方式則是使用由協力廠商提供的 X.509 憑證。 |
安全性模式
WCF 有數種傳輸安全性模式,下表將加以說明。
[模式] | 描述 |
---|---|
None | 未在傳輸層或訊息層提供任何安全性。 除了 <basicHttpBinding> 元素,或 BasicHttpBinding 類別 (使用程式碼時) 之外,沒有任何預先定義的繫結會預設使用此模式。 |
傳輸 | 使用安全傳輸 (例如 HTTPS) 以獲得完整性、機密性和雙向驗證。 |
訊息 | 使用 SOAP 訊息安全性,以獲得完整性、機密性和雙向驗證。 SOAP 訊息是根據 WS-Security 標準加以保護。 |
混合模式 | 使用傳輸安全性,以獲得完整性、機密性和伺服器驗證。 使用訊息安全性 (WS-Security 和其他標準) 以獲得用戶端驗證。 (此模式的列舉型別為 TransportWithMessageCredential ) |
兩者 | 在兩個層級執行保護和驗證。 此模式僅適用於 <netMsmqBinding> 元素。 |
認證和傳輸安全性
「認證」是指代表用來建立所宣告之身分識別或功能的資料。 出示認證包括出示資料以及資料的所有權證明。 WCF 支援在傳輸及訊息安全性層級皆支援各式認證類型。 您可以針對 WCF 繫結指定認證類型。
在許多國家或地區,駕駛執照就是認證的一個範例。 執照包含代表一個人身分識別和能力的資料。 其中包含以持有人的照片做為所有權的證明。 執照是由受信任的授權單位發出,通常是政府的發照部門。 執照會經過密封,而且可能內含雷射防偽,表示沒有遭到竄改或偽造。
以 WCF 中支援的兩種認證類型為例:使用者名稱和 (X.509) 憑證認證。
對於使用者名稱認證,使用者名稱代表宣告的身分識別,而密碼代表所有權的證明。 在此案例中,受信任的授權單位是驗證使用者名稱和密碼的系統。
在憑證認證中,主體名稱、主體別名或憑證內的特定欄位可用來代表所宣告的身分識別和 (或) 能力。 認證中資料所有權的證明,是使用相關的私密金鑰產生簽章的方式建立。
如需程式設計傳輸安全性和指定認證的詳細資訊,請參閱繫結和安全性以及安全性行為。
傳輸用戶端認證類型
下表說明建立使用傳輸安全性的應用程式時,可能使用的值。 您可以在程式碼或繫結設定中使用這些值。
設定 | 描述 |
---|---|
None | 指定用戶端不需要提出任何認證。 這會轉譯成匿名用戶端。 |
基本 | 指定基本驗證。 如需詳細資訊,請參閱 RFC2617,HTTP Authentication: Basic and Digest Authentication。 |
Digest | 指定摘要式驗證。 如需詳細資訊,請參閱 RFC2617,HTTP Authentication: Basic and Digest Authentication。 |
Ntlm | 指定在 Windows 網域上使用 SSPI 交涉的 Windows 驗證。 SSPI 交涉的結果會是使用 Kerberos 通訊協定或 NT LanMan (NTLM)。 |
Windows | 指定在 Windows 網域上使用 SSPI 的 Windows 驗證。 SSPI 會挑選 Kerberos 通訊協定或 NTLM 做為驗證服務。 SSPI 會先嘗試 Kerberos 通訊協定,如果失敗的話,才會使用 NTLM。 |
憑證 | 使用憑證 (通常是 X.509) 執行用戶端驗證。 |
訊息用戶端認證類型
下表說明建立使用訊息安全性的應用程式時,可能使用的值。 您可以在程式碼或繫結設定中使用這些值。
設定 | 描述 |
---|---|
None | 允許服務與匿名用戶端互動。 |
Windows | 允許在 Windows 認證的已驗證內容中發生 SOAP 訊息交換。 使用 SSPI 交涉機制挑選 Kerberos 通訊協定或 NTLM 做為驗證服務。 |
使用者名稱 | 允許服務要求用戶端必須使用使用者名稱認證進行驗證。 請注意,WCF 不允許任何透過使用者名稱進行的密碼編譯作業,例如產生簽章或加密資料。 如此一來,WCF 會在利用使用者名稱認證時強制保護傳輸。 |
憑證 | 允許服務要求用戶端使用憑證進行驗證。 |
CardSpace | 允許服務要求用戶端使用 CardSpace 進行驗證。 |
程式設計認證
WCF 程式設計模型允許您使用服務行為和通道行為,針對每一種用戶端認證類型指定認證值和認證驗證程式。
WCF 安全性有兩種認證類型:服務認證行為和通道認證行為。 WCF 中的認證行為會指定實際資料,也就是用來滿足安全性需求的認證,而這些需求會透過繫結表達。 在 WCF 中,用戶端類別是在作業引動和訊息之間轉換的執行階段元件。 所有用戶端都是繼承自 ClientBase<TChannel> 類別。 基底類別上的 ClientCredentials 屬性可讓您指定各種用戶端認證的值。
在 WCF 中,服務行為是套用至類別的屬性,此類別會實作服務合約 (介面),以程式設計的方式控制服務。 ServiceCredentials 類別可讓您指定服務認證的憑證,以及各種用戶端認證類型的用戶端驗證設定。
訊息安全性的交涉模型
訊息安全性模式可讓您執行傳輸安全性,如此服務認證就會在用戶端超出範圍時設定。 例如,如果您使用儲存在 Windows 憑證存放區中的憑證,就必須使用 Microsoft Management Console (MMC) 嵌入式管理單元這類的工具。
訊息安全性模式還可讓您執行傳輸安全性,如此服務認證就會在初始交涉的過程中與用戶端交換。 若要啟用交涉,請將 NegotiateServiceCredential 屬性設為 true
。