2010-10-01 189 views
3

我有一個需要連接到服務器的java應用程序。它很簡單,以確保服務器不被欺騙使用SSL,但我似乎無法繞過我的頭如何服務器將驗證客戶端,以確保請求只來自可信方。只有第一個通信需要被認證。在通信步驟中,客戶端和服務器將交換一些將用於隨後認證客戶端的信息。由服務器進行的客戶端身份驗證

我能想到的一種方法是對應用程序進行數字簽名,然後將應用程序的數字簽名發送到服務器。服務器驗證數字簽名以認證客戶端。現在我有這方面幾個問題:

  1. 是否有可能從 獲得內本身 應用程序的數字簽名。如果是,那麼如何? (我試過尋找這對 互聯網,但找不到任何 辦法這樣做)
  2. 是否可以用其他的方法,如 十六進制編輯器中提取此簽名。如果這是已知的,則 任何人都可以將該簽名 發送到服務器並欺騙客戶端。

另外,請讓我知道如果我是完全錯誤的軌道在這裏:)

編輯上:通過「可信方」我的意思是「未修飾的客戶端」

+0

公私鑰加密可能有效。將公鑰分配給受信任方。 – 2010-10-01 08:30:50

+0

@Sagar V,客戶將自由分配,我無法控制它最終運行的位置。如果可以取出,則將公鑰分發給客戶端不是一種選擇。 – Prashast 2010-10-01 08:44:55

+0

什麼會阻止修改後的客戶端發送未修改的客戶端的數字簽名? – Christoffer 2010-10-01 08:47:12

回答

4

另外,請讓我知道如果我 完全在錯誤的軌道在這裏:)

您是:)

您的目標是「確保請求只來自可信方」 - 如果「可信方」被解釋爲「可信用戶」,則這是全球數百萬網站通過簡單密碼每天解決的標準身份驗證問題認證。如果你想變得花哨(並且不方便/昂貴),你可以使用SSL client certificatesRSA tokens

但是,您似乎將「可信任方」解釋爲「使用未修改的客戶端的可信用戶」,其中「未修改」包括用戶在目的上進行的修改。

好吧,忘了那個。無法完成,除非您讓用戶只使用由您提供的物理安全硬件。保護軟件不被控制其執行環境的人員任意操縱是不可能的。電影業已花費數十億美元,由於加密和許可要求,迫使新標準變得更加複雜和昂貴,並疏遠了許多試圖這樣做的客戶,並且失敗(反覆)。

編輯: 好像它甚至不是關於在所有客戶端(如在保護它反對修改,通常是指反盜版措施),這顯然是有關控制對服務器的訪問。在這種情況下,不要浪費大腦思考客戶的時間。這不是你的問題。訪問服務器是。因此,開始考慮協議,如何認證客戶端以及接受哪些請求。修正你的協議,以便「假裝成客戶端」是一個非問題,因爲除了那些合法客戶端可能發送的請求不會被接受。

+0

你說得對,我將「可信任方」解釋爲「未經修改的客戶」。這種情況沒有人類用戶。我試圖避免的是反編譯應用程序,理解如何與服務器通信然後假裝成客戶端的邏輯。不應該代碼簽名能夠解決這樣的問題? – Prashast 2010-10-01 08:40:52

+2

@Prashast:不會,完全浪費時間。您可以通過代碼混淆使其變得更加困難,但正如我所說的,保護軟件免受控制其執行環境的惡意用戶的影響甚至在理論上是不可能的。另請參閱編輯。 – 2010-10-01 08:51:04

+0

如果我的代碼是由我的私鑰簽名的,我不應該能夠以某種方式檢查該數字簽名以進行身份​​驗證嗎?噢,如果不能這樣做,我會有很多重新思考的事情:) – Prashast 2010-10-01 09:25:49

相關問題