2011-06-30 81 views
2

我正在尋找真正的建議。我有一個系統運行在我的amazon雲實例上,這個實例基本上是在JBoss上運行的一堆REST服務。我的下一步是確保這些服務的安全,因爲信用卡信息將流經他們。我也需要進行身份驗證,所以我的問題是,可以將哪些最安全的方法用於REST服務?最安全的方式來保護Jersey REST服務

SSL CA Certs當然如此加密數據使用CA可能是我會開始當然。 這是爲了爸爸的聲譽嗎?還是我不得不爲Verisign掏錢?

對於身份驗證,簡單地進行基本身份驗證或者可能只是讓調用者以某種方式簽署請求就足夠了嗎?任何其他方法?

OH我忘了提及,客戶端應用程序是一個iPad應用程序。感謝您的建議。

回答

0

使用證書是安全性的一個很好的開始。我發現Thawte在價值和受支持的客戶之間取得了很好的平衡。當我看了(一段時間後),GoDaddy沒有得到足夠的客戶端支持(Java,Objective-C/iPad,瀏覽器),但現在可能已經改變了。您一定要確保您獲得的證書由您關心的客戶端支持(針對您的iPad的Objective-C)。

基本身份驗證通過https確定,只要確保您不會在URL中顯示任何內容(如ID或標記),因爲URL本身是可見的。如果您通過https發佈所有數據,您將獲得一個良好的開端。

2

您希望能夠在中間人攻擊中保護自己免受人侵,並防止重播請求。 任何時候有與支付相關的信息被中繼,我會選擇使用隨機數和時間戳簽名請求。 這涉及使用客戶端和服務器之間的共享密鑰來簽署請求。這個祕密可以在登錄時傳遞一次。

使用時間戳和客戶端生成的唯一隨機數值作爲簽名字節的一部分。 這些值也作爲請求中的標頭傳回,以便服務器可以重新組裝請求。

從捲曲執行的典型的請求可能是這樣的:

curl -v -H "Content-Type: application/json" -H "Authorization: ff7b93ad-27d0-49f6-90bd-9937951e5fcc:ncYoA5n5s2nFSm7qyvf5hDgL4pmmPOUP3zo/UYfaQKg=" -H "x-date:2013-03-28T19:34:00+00:00" -H "nonce:2d1321d32a" -X GET 'http://localhost/orders/123' 

授權頭包含一個ID來標識請求,然後將簽名的請求的哈希值。 日期標題應該在服務器時間的某個偏移量內(15分鐘是合理的限制)。

我有一個完整的代碼示例here