2011-06-27 130 views
1

我有兩個WCF服務使用WsHttpBinding與傳輸安全性相互證書身份驗證,它們被託管在同一個Windows服務器上。可以訪問一個WCF服務的客戶端不應該有權訪問其他WCF服務。我需要一些幫助來在Windows主機上配置客戶端證書。客戶端證書由受信任的CA簽署,中間和根證書鏈已經安裝在服務器上。看起來服務自動依賴信任鏈,並且在讓客戶端訪問服務之前根本不需要在服務器上安裝實際的客戶端證書 - 這不是我想要的行爲。有人可以告訴我應該如何配置這些客戶端證書,以明確允許訪問一個服務而不是另一個服務?WCF WsHttpBinding證書傳輸安全 - Windows證書配置

謝謝。

回答

1

這與證書本身無關。使用相互SSL身份驗證時,證書僅用於對客戶端進行身份驗證,並且身份驗證在您的應用程序之外完成(這與您可以創建自定義證書驗證程序的消息安全性不同)。一旦證書被信任,客戶端就會使用證書進行身份驗證,自動向服務器上的任何內容進行身份驗

您正在尋找授權 - 您可以定義可以通過您的服務對客戶端進行身份驗證的內容的步驟。您可以使用role based security將授權邏輯硬編碼到您的服務中,也可以實施兩個自定義ServiceAuthorizationManager,並將其分配給單個服務。

+0

謝謝你的答案拉迪斯拉夫。所以看起來我必須編寫代碼才能限制對所需證書的訪問。在這種情況下,我打算編寫一個SAM,並根據證書指紋進行本地配置,以指定授權客戶端。您能告訴我什麼是在運行時確定經過身份驗證的客戶端證書指紋的正確方法嗎? – shermoid

+0

您是否熟悉證書信任列表(CTL)?我能配置一個CTL來實現結果嗎? – shermoid

+0

它應該在'ClaimSet'中,您將使用類似'set.FindClaims(ClaimTypes.Thumbprint,Rights.Identity)'的東西',並且您應該獲得帶有指紋證書的所有聲明。 –