我們有一個要求,要求我們爲應用程序中的某些關鍵功能簽名參數。方法調用是通過RMI完成的。我的第一個想法是爲參數構建一個包裝類,並使用SignedObject對其進行簽名。但是這會導致很多包裝對象。在Java中籤名並驗證方法調用
對於如何以更一般的方式完成此任務,有沒有人有任何想法? 可能會覆蓋RMI中的發送和接收功能以及廣告簽名和驗證?
我們有一個要求,要求我們爲應用程序中的某些關鍵功能簽名參數。方法調用是通過RMI完成的。我的第一個想法是爲參數構建一個包裝類,並使用SignedObject對其進行簽名。但是這會導致很多包裝對象。在Java中籤名並驗證方法調用
對於如何以更一般的方式完成此任務,有沒有人有任何想法? 可能會覆蓋RMI中的發送和接收功能以及廣告簽名和驗證?
驗證調用方法並授予相關權限的用戶是不夠的嗎?這樣你可以傳遞你想要的任何參數,你只需要驗證一次。您應該能夠假設,如果他們可以模擬用戶,他們也可以使用代碼來簽署參數。
除非它們從其他地方(從你最初可能?)獲取參數,在這種情況下,如果參數是字符串,無論哪個創建參數值,都可以使用它們的私鑰加密它們,並且可以使用公鑰意味着他們是實際參與參數值的人。用簽名包裝包裝所有參數可能會產生很高的開銷。
您可以通過SSL運行RMI。 Sun有兩個JSR來做這件事,但他們被專家委員會的投票拒絕。所以現在你必須選擇一種非標準的方式,我相信大多數應用服務器都這麼做。
問題是,SSL不在應用程序中,我們不允許僅依賴於此,我們還必須手動簽名。這裏的圖層很多,丟失了.. –
當然有幾種方法可以做到這一點。一個確實是簽署數據流。另一個是將參數對象實例和基本類型編碼成一個字節數組。兩者都要求您在某個時候將鉤入RMI。
可能更好的是將RMI服務放在SOAP服務後面,例如如here所述。然後你可以創建一個web服務。一旦你有一個網絡服務,你可以部署WS-Security。在這種情況下,您可以依賴預定義和研究的傳輸層安全性消息格式。
答案除了Tom Hawtins回答使用SSL,這可能是大多數讀者的方式,顯然除了原始提問者有其他限制。 –
請注意,這可能是一個很好的解決方案,但這並不意味着它是一個* easy *解決方案,準備做很多工作。可能將實施和/或測試留給顧問。 –
我不認爲我們可以選擇在RMI調用之間建立一個SOAP層。你談論關注RMI,你有什麼想法如何做到這一點? –
不要忘記提及管理層,這不是一件容易的任務*。你需要一個好的密鑰管理方案,設計你自己的協議,深入研究密碼學,並以某種方式證明它正在工作,不容易受到攻擊。希望你沒有太多的性能限制,否則你可能會遇到麻煩。 –