【问题标题】:How can I restrict Java RMI to a specific interface?如何将 Java RMI 限制为特定接口?
【发布时间】:2017-10-28 10:43:59
【问题描述】:

我们的产品有两个接口,一个是面向客户的接口,一个是内部接口。是否可以让 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

【问题讨论】:

标签: java rmi firewall


【解决方案1】:

我发现这个属性可以在服务器上设置,这会阻止外部请求吗?

-Djava.rmi.server.hostname=127.0.0.1

该属性控制将哪个 IP 地址放入从此 JVM 导出的删除对象的存根中。如果您想将这些限制为“localhost”设置的客户端,这实际上可以工作,但这不是一个很好的解决方案。

您必须使用RMIServerSocketFactory 导出远程对象,该对象创建ServerSockets 绑定到您想要的特定IP 地址。

有没有办法让 rmiregistry 像 mysql 的绑定选项一样选择它所侦听的接口?

同样的答案。您必须自己通过LocateRegistry.createRegistry(int port, RMIServerSocketFactory ssf, RMIClientSocketFactory csf) 导出注册表。 csf 当然可以为空。

如果您在导出的 JVM 中使用多个实例,请确保您的 RMIServerSocketFactory 具有 equals() 的合理实现,例如只要绑定的IP地址相同,它们就相等。

这个问题似乎相关

不是。

【讨论】:

  • 有没有更好的方法来保护您推荐的 RMI 端口?主要目的是防止来自我们客户网络的攻击。
  • @simgineer 我提供了一个解决方案。它出什么问题了?以及另一种解决方案在哪些方面需要更好?
猜你喜欢
  • 1970-01-01
  • 2015-08-18
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2012-03-11
  • 1970-01-01
相关资源
最近更新 更多