2011-02-01 81 views
0

我的情景:驗證主叫/服務器在WCF

  • 許多WCF客戶端這是在環境中我控制範圍之外的
  • 服務器要麼是我的還是我的控制之外的環境

因此,最糟糕的情況是客戶端和服務器超出了我的控制範圍。更具體地說,我可能會認爲託管此代碼的人可能會嘗試惡意地模擬服務器或客戶端(服務器更可能)。但是,客戶端需要驗證服務器是我的代碼,服務器需要驗證客戶端是我的代碼。我已經看到所有使用證書的建議;然而,這是一個選擇給我的場景?

我考慮的一種方法是編寫IClientMessageInspector和IDispatchMessageInspector來設置和驗證雙方的自定義SOAP頭。我將根據源代碼中包含的密鑰創建一個HMAC簽名(假設我有一種方法可以將其隱藏),然後根據消息正文驗證摘要。

我覺得這樣會工作;不過,我覺得我可能會有更多現成的東西,我在這裏失蹤了。我關門了嗎?感謝您的任何指導!

+0

要清楚的是,我的服務器將託管在可能不受信任的各方的基礎設施上,這意味着如果我使用SSL或其他證書,不受信任方也可以訪問此證書。雖然我可能在這裏錯過了一些東西...... – toddkitta 2011-02-01 16:17:39

回答

0

我不認爲有什麼開箱即可做到這一點,只是因爲它是一個不尋常的要求服務器來驗證客戶端調用服務的代碼是授權代碼。

一般來說,它是足以建立信任如下:

  1. 服務器有一個證書和服務使用SSL - 這樣的客戶有信心,他們都連接到正確的服務器計算機。
  2. 客戶端向服務器提供認證詳細信息(例如用戶名/密碼,證書等),以便服務器知道連接客戶端可以被信任。

您正在嘗試執行額外的步驟來驗證用戶/機器不僅經過驗證,而且驗證了運行的代碼已經過驗證 - 這只是過度的。如果代碼運行的是驗證,或者:

  1. 一個機器受到了損害,在這種情況下你有更大的問題擔心。
  2. 您的一位用戶已經針對您的服務編寫了代碼並正在「非法使用」它。如果您的服務只允許授權用戶執行「危險」操作,這應該不成問題。
+0

我更關心的是客戶端知道它正在與服務器交談。如果沒有開箱,客戶/派遣檢查員是否合理解決方案? – toddkitta 2011-02-01 05:17:43

+0

這就是*正好* SSL證書的用途:)你提出的建議**可以工作,但SSL是開箱即用的解決方案,我看不到任何理由來實施替代方案。 – 2011-02-01 05:20:06

1

證書絕對是您的情況。

您的服務器很容易被客戶端認證,因爲它將提供每個客戶端已知的證書,SSL在這裏是一個不錯的選擇。

服務器還可以通過請求每個客戶端提供一個證書來驗證客戶端(服務器可以檢查特定的證書頒發者 - 在這種情況下您自己的頒發者)。

現在您只需要正確管理/保護您的證書服務器,以確保它不會受到威脅。