2014-03-24 135 views
2

我正在編寫一個服務器 - 客戶端應用程序,通過互聯網進行通信,我有幾個關於安全性的問題和疑慮。我已經做了一些研究,發現一些有用的帖子,但我想了解更多信息。我讀了一些相關的問題是:編寫安全的RMI服務器 - 客戶端應用程序

Secure authentication of client over RMI

java rmi authentication & security. exportObject makes it public?

Is communication in java rmi secure?

我有3個部分來考慮:

  1. 信息在客戶端和服務器之間交換。
  2. 客戶端的身份驗證。
  3. 利用正在運行的RMI服務器(黑客等)。

我所知道的:

  1. 基於SSL的RMI。使用SSL套接字而不是默認套接字將加密在客戶端和服務器之間傳遞的所有信息。這包括對象交換和方法調用。
  2. 在建立RMI連接之前使用SSL上的用戶名/密碼組合進行身份驗證。根據我的理解,應該有一種在RMI連接內進行身份驗證的方法,但它被拒絕了。
  3. 不太確定這裏可以做什麼或需要做什麼。我知道你不能只編寫你自己的客戶端,並要求連接到服務器,因爲你需要一個ObjectID和遠程接口。但是,是否無法反編譯您所需的類\接口,因爲它們是以RMI方式發送的?我也在研究中看到了這個Youtube視頻[http://www.youtube.com/watch?v=otjllNaBxiw],它讓我擔心它的容易程度,儘管我不知道服務器是否安裝不正確。

總而言之,我還需要在RMI上通過互聯網考慮其他安全問題嗎?我是否缺少我需要看的解決方案?我已經知道錯了嗎?

+0

您可以使用應用程序服務器和應用程序客戶端嗎?它們之間的連接使用RMI-IIOP,您可以利用服務器安全性。在服務器上,您可以訪問EJB以進行數據訪問。 – onesixtyfourth

+0

@onesixtyfourth閱讀[文檔](http://docs.oracle.com/javase/7/docs/technotes/guides/rmi-iiop/rmiiiopUsing.html)在我看來,RMI-IIOP只需要部分的整體應用程序不是用Java寫的,事實並非如此。無論如何,這將如何解決擔憂? – user1803551

回答

3

客戶端和服務器之間交換的信息。

RMI over SSL。

客戶端的身份驗證。

客戶端的身份驗證由SSL完成。你的意思是授權,這是'相對'容易。定義你自己的RMIServerSocketFactory,它返回一個ServerSocket覆蓋,它的implAccept()方法將套接字包裝在一個SSLSocket中,添加一個握手監聽器並將needClientAuth設置爲true(並且clientMode爲false)。然後,您的握手監聽器應該從SSLSession中獲取並檢查客戶端證書,以查看其身份驗證的身份是否經過授權,如果未經授權,則只需關閉套接字即可。

授權服務器,在客戶端,另一方面是複雜的巴洛克式。您真的需要Jini的JERI API才能正確執行。

利用正在運行的RMI服務器(黑客攻擊等)。

我不會說這是不可能的,但它是非常困難的,並且有幾條強大的防線。你需要ObjectID,它是隨機的,並且可以安全地隨機生成,並且你需要這些類。在RMI中不會發送類和接口,除非您特別啓用它,並且它們是通過可以任意強保護的輔助信道發送的,例如使用雙向認證的HTTPS。所以你不能得到這些。然後你需要獲得授權,這基本上需要妥協服務器。如果可能的話,什麼都可以。

相關問題