Я не знаю, должен ли я ответить на свой вопрос.
Я пробовал много подходов, но у меня были исключения, и узлы не запускались. Итак, я полагаю, что для моих ситуаций не существует универсального c способа защиты связи RMI с помощью криптографии RSA.
Итак, я попробовал другой подход.
Я изменил сигнатуру метода методы RMI в интерфейсе и реализации от
public void query(MessageID messageID, long TTL, String fileName, String upstreamIP) throws RemoteException
до
public void query(byte[] bytes) throws RemoteException
Теперь перед каждым вызовом RMI я преобразую аргументы в пользовательский объект, а затем в байты, применяю Шифрование RSA с использованием закрытого ключа отправителя для преобразования в зашифрованные байты и последующей передачи его на сервер.
На стороне сервера собирайте байты, дешифруйте их с помощью ключа RSA publi c отправителя, а затем приведите к пользовательский объект, извлеките информацию и, наконец, перейдите к бизнес-логике c. Этот процесс выполняется при каждом вызове RMI.
Это похоже на сокеты, где мы записываем все в поток. В конце концов, при вызове RMI объекты, которые мы передаем, преобразуются в байты. Итак, используя этот подход, я явно конвертирую их в байты, а затем применяю шифрование и передаю его через RMI. По сети он будет передаваться как зашифрованные байты. Это будет для всех вызовов RMI, которые включают сообщения, а также содержимое файла.