如何限制Java RMI到特定的接口?
我们的产品有两个接口,一个是面向客户的内部接口。是否有可能让rmi仅在特定接口(如环回)上运行,或者我们是否需要使用防火墙规则来防止访问?如何限制Java RMI到特定的接口?
有没有办法让服务器只绑定到指定接口的请求?我发现这个属性可以在服务器上设置,这是否会阻止外部请求?
-Djava.rmi.server.hostname=127.0.0.1
有没有办法有rmiregistry中选择它侦听像MySQL的绑定选项的界面?
这个问题似乎有关,但我希望有一个简单的答案: Java RMI: How can I restrict RMI method to only be called internally by the client object
我发现这个特性,可以在服务器上进行设置,这也防止外部请求?
-Djava.rmi.server.hostname=127.0.0.1
该属性控制哪些IP地址放在删除此JVM导出对象的存根。如果你想限制这些客户端的'本地主机'设置这实际上会工作,但它不是一个很好的解决方案。
您将不得不导出带有RMIServerSocketFactory
的远程对象,该RMIServerSocketFactory
会创建绑定到您想要的特定IP地址的ServerSockets
。
有没有办法让rmiregistry选择它所监听的接口,就像mysql的绑定选项一样?
相同的答案。您将不得不通过LocateRegistry.createRegistry(int port, RMIServerSocketFactory ssf, RMIClientSocketFactory csf)
自己导出注册表。 csf
当然可以为空。
如果您在导出JVM中使用了多个实例,请确保您的RMIServerSocketFactory
已合理实现equals()
,例如,只要绑定IP地址相同,它们就是相等的。
这个问题似乎与
它不是。
有没有更好的方法来保护您建议的RMI端口?主要目标是防止来自我们客户网络的攻击。 – simgineer
是的,它可能的,使用插座工厂。 https://docs.oracle.com/javase/7/docs/api/java/rmi/server/UnicastRemoteObject.html#UnicastRemoteObject(int,%20java.rmi.server.RMIClientSocketFactory,%20java.rmi.server.RMIServerSocketFactory) – Antoniossss