Безопасная аутентификация клиента через RMI - PullRequest
0 голосов
/ 24 августа 2011

Я думал о том, чтобы аутентифицировать пользователей моей службы 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 ed, любой, кто угадает правильный порт, может получить его.

Как я могу сделать это правильно?

1 Ответ

0 голосов
/ 24 августа 2011

Похоже, когда реальный сервис экспортируется, любой, кто догадывается, правильный порт может его получить.

Нет. Им также придется угадывать идентификатор удаленного объекта, и есть системное свойство, которое заставляет их генерироваться через безопасный ГСЧ. У них также должен был бы быть класс удаленного интерфейса, и они также должны были бы иметь возможность создавать удаленную заглушку для объекта с правильным IP-портом, удаленным интерфейсом (-ами) и удаленным UID. Нелегко. Однако вам, безусловно, следует изучить SSL с взаимной аутентификацией, если у вас есть серьезные проблемы с безопасностью, и, возможно, в полной мере использовать Jini / Secure JERI, если вы полностью и совершенно серьезно относитесь к безопасному RMI. Смотри также этот документ .

...