2011-08-23 68 views
0

我想这样安全验证了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 ...; 
    } 

} 

来验证我的RMI服务的用户。然而,这可能不是真正的安全。我怀疑当真实的服务是export ed时,任何猜测正确端口的人都可以获得它。

我该如何正确地做到这一点?

+0

当你说“任何猜测正确的端口的人都可以获得它。”你什么意思?你是指,他们可以获得正在通过的authCode? – momo

+0

@momo他的意思是,任何人谁猜测远程服务的远程绑定将能够使用它 –

+0

...在这种情况下,他会错... – EJP

回答

0

它看起来像是什么时候真实的服务被导出,任何人都猜测正确的端口可以获得它。

不需要。他们还需要猜测一个远程对象ID,并且有一个系统属性使它们通过安全的RNG生成。他们还必须具有远程接口类,并且他们还必须能够使用正确的IP:端口,远程接口和远程UID构造远程存根到对象。不容易。但是,如果您有严重的安全问题,那么您肯定应该考虑使用SSL进行相互身份验证,并且如果您对安全RMI完全严格认真,可能需要完整的Jini/Secure JERI。另见this white paper