2013-03-02 84 views
1

我一直在使用Ruby on Rails開發一個Web服務器應用程序,並且使用Android開發一個客戶端應用程序。 Web服務器有一些路由到客戶端訪問,沒有身份驗證。我想創建一個令牌來驗證請求是否來自客戶端。我想這樣一個解決方案:如何在Ruby和Android應用程序之間加密和解密數據?

  1. 創建一個鍵,例如,「計算器;
  2. 分享此鍵在客戶端和服務器應用程序;
  3. 使用AES加密與生成令牌生成隨機字符串函數+鍵;
  4. 當客戶端應用程序被髮送到服務器的請求,也送所生成的令牌;如果令牌是有效的或不使用所述共享密鑰和AES加密
  5. 服務器驗證

這裏是我的疑惑:

  1. 這是發展它們之間的通信的最佳方式?
  2. 是否有gem/api crypt和解密在兩個系統中使用?

請不要猶豫來形容建議或例子來引導我=)

在此先感謝

回答

2

一個更加安全和標準的方式是使用SSL客戶端證書。

爲每個新版本的應用程序發佈一個客戶端證書,確保它使用只有您或您的簽名CA擁有私鑰的證書(即CA證書)進行簽名。

在允許連接之前設置您的Web服務器以要求客戶端證書。設置Web服務器以再次驗證您持有的CA證書的證書。

這種方式沒有「共享的祕密」,可以從您的應用程序中提取。如果有人提取並竊取客戶端證書,請使用新證書發佈應用的更新版本,然後將舊證書添加到您的CA撤銷列表中,或者僅告訴Web服務器阻止該證書。

沒有紅寶石,Java或JavaScript代碼要寫。

+0

感謝您的回覆Tim,我將研究它的工作原理和實現。如果你有很好的教程建議,請告訴我。 – hugalves 2013-03-03 05:07:21

+0

這不完全正確。通常,客戶端密鑰對由客戶端應用程序*生成,並且使用公鑰創建證書。客戶端應用程序(僅限客戶端應用程序)必須能夠訪問此客戶端證書的私鑰。 – 2013-03-03 12:53:55

+0

是的,你是正確的,這是正常的情況,但在這種情況下,因爲你將發佈一個客戶端證書被許多應用程序用戶共享,並且由於你確實控制了硬幣的兩面,客戶端應用程序只需要一個您可以驗證和撤銷已簽署的證書。如果您要爲每個用戶頒發證書,那麼讓每個用戶使用自己的密鑰對生成自己的證書會更合理。 – 2013-03-07 14:13:03

相關問題