Я хочу реализовать зашифрованное соединение между двумя серверами JAVA, оба находятся под моим контролем. Я имею в виду три архитектуры и хочу узнать ваши плюсы и минусы.
Архитектура 1:
Всякий раз, когда я вызываю удаленный метод, я передаю параметры не как простой текст, а как сериализованный объект CipherText. Я буду использовать для этого ESAPI-библиотеку, но фактическая реализация не имеет значения. Важно то, что CipherText-Object содержит произвольные Данные, зашифрованные симметричным ключом, включая MAC для аутентификации. Симметричный ключ доступен как общий секретный ключ на обоих серверах.
Архитектура 2:
Меня не волнует шифрование на уровне приложений, но я делегирую его на транспортный уровень. Это может быть VPN-туннель или какое-либо шифрование между серверами, которое поддерживается. У меня не так много информации о том, что сейчас доступно на современном сервере приложений. Вклад в это также приветствуется.
Архитектура 3:
Использование javax.rmi.ssl для использования RMI поверх SSL.
Такое ощущение, что архитектура 1 сложна и трудна для реализации. Архитектура 2 оставляет шифрование на сервере приложений. Как разработчик приложений, я не имею никакого контроля над настройкой этих функций. Это плохо, потому что я хочу убедиться, что приложение не может быть использовано без надлежащего шифрования. Архитектура 3 кажется лучшим способом, но у меня нет опыта работы с этой технологией.
Как бы вы оценили эти три архитектуры? Я пропустил еще лучший способ реализовать это? Основная цель - обеспечить безопасную зашифрованную связь, но сложность получаемого исходного кода, проблемы с производительностью и тому подобное, конечно, также вызывают беспокойство.