我正在编写一个服务器客户端应用程序,通过互联网进行通信,我有几个关于安全性的问题和疑虑。我做了一些研究,发现这里的一些帖子很有用,但我想了解更多信息。我读到的一些相关问题是:
Secure authentication of client over RMI
java rmi authentication & security. exportObject makes it public?
Is communication in java rmi secure?
我需要考虑3个部分:
我所知道的:
总而言之,我是否需要通过互联网在RMI中考虑其他安全问题?我错过了一个我需要看的解决方案吗?我已经知道错了吗?
答案 0 :(得分:3)
客户端和服务器之间交换的信息。
SSL上的RMI。
客户端身份验证。
客户端的身份验证由SSL完成。你的意思是授权,这是相对'简单。定义您自己的RMIServerSocketFactory,它返回一个ServerSocket覆盖,其implAccept()方法将套接字包装在SSLSocket中,您向其添加一个握手侦听器并将needClientAuth设置为true(并将clientMode设置为false)。然后,您的握手侦听器应该从SSLSession获取并检查客户端证书,以查看其身份验证的身份是否已获得授权,并且如果未经授权,则只需关闭套接字。
另一方面,在客户端授权服务器非常复杂。你真的需要Jini中的JERI API才能正确地完成它。
利用正在运行的RMI服务器(黑客等)。
我甚至不敢说这是不可能的,但这是非常困难的,并且有几条强有力的防线。你需要ObjectID,它是随机的,并且可以安全随机,你需要这些类。除非您专门启用它们,否则不会在RMI中发送类和接口,并且它们由您可以任意强制保护的辅助通道发送,例如使用经过双向身份验证的HTTPS。所以你无法得到那些。然后你需要获得自己的授权,这基本上需要妥协服务器。如果可能的话,那就是。