通过RMI安全验证客户端

时间:2011-08-23 20:52:02

标签: java security authentication rmi

我正在考虑像我这样

验证我的RMI服务的用户
interface RemoteService extends Remote { ... }
interface RemoteServiceProvider extends Remote { ... }
class RemoteServiceProviderImpl implements RemoteServiceProvider {
   RemoteService getService(String authCode) throws RemoteException {
     if (check(authCode)) return (RemoteService) UnicastRemoteObject.export(theRemoteService, 0);
     else throw ...;
   }

}

但是,这可能不太安全。我怀疑当真实服务被export时,任何猜测正确端口的人都可以获得它。

我怎样才能以正确的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

  

看起来当真实服务导出时,任何人都是   猜测正确的端口可以获取它。

没有。他们还必须猜测一个远程对象ID,并且有一个系统属性可以通过安全的RNG生成它们。他们还必须拥有远程接口类,并且他们还必须能够使用正确的IP:端口,远程接口和远程UID构建对象的远程存根。不容易。但是,如果您有严重的安全问题,那么您当然应该通过相互身份验证来查看SSL,如果您对安全RMI完全认真,那么可能需要完整的Jini / Secure JERI。另请参阅this white paper