Возможна ли какая-либо взаимная аутентификация между приложением и java агентом, которая бы гарантировала, что неправильный агент никоим образом не может быть загружен.
Нет. Приложение не имеет (почти) никаких знаний об агенте. Конечно, у приложения нет способа правильно проверить агента.
Я думаю, вы могли бы разработать «протокол», в котором приложение работает, только если агент вызывает конкретный метод приложения определенным образом. Однако это можно обойти путем обратного инжиниринга приложения или реального агента и использования этих знаний для написания плохого агента, который имитирует требуемое поведение.
Но я думаю, что вы поступаете неправильно путь. Существует много лучших (более простых, понятных, более эффективных) способов внедрения поведения в приложение Java. И я думаю, что могу определить, что ваша мотивация состоит в том, что вы хотите как можно меньше модифицировать устаревшее приложение. И это основная мотивация вашего сложного агентного подхода.
(Моя реакция на это заключается в том, что вы, скорее всего, потратите больше усилий на агентские вещи, чем сэкономили бы, не изменяя устаревшее приложение. И результат будет намного сложнее поддерживать.)
Я также подозреваю, что ваше требование взаимной аутентификации приложения и перехватчиков (как бы они ни реализовывались) не является действительно необходимым. Следствие использования агентов, а не фундаментальное требование.
Если бы я делал это и был обеспокоен защитой от попыток (инсайдера) подорвать бизнес-правила, я бы:
- Выберите альтернативный механизм
- Внедрите новый код и модификации в устаревшее приложение по мере необходимости.
- Аудит основного приложения и логи перехватчика c
- Присоединяйтесь к двум части вместе (в зависимости от того, как работает механизм)
- Установите комбинированную систему на защищенную машину или контейнер.