У меня на стороне клиента сгенерирована цифровая подпись (JavaScript). Затем подпись проверяется на серверной части Java. Для проверки подписи я передаю на серверную часть - (значение подписи, открытый ключ и сообщение для проверки). Пока все хорошо, но тогда возникает вопрос - а что, если кто-то выполнит атаку "человек посередине"? Он может легко сгенерировать подпись и отправить свою - (значение подписи, открытый ключ и сообщение.). Так что в некотором смысле это делает мою текущую реализацию недостаточно безопасной.
Как я могу этого избежать? Насколько я исследовал, я должен убедиться, что отправленный открытый ключ исходит от соответствующего клиента, и это делается через CA (центр сертификации). Однако в моем случае я делаю это как выпускной проект в университете, и я не знаю, как подойти к этой проблеме.
Должен ли я сгенерировать сертификат открытого ключа на стороне клиента и отправить его вместе с открытым ключом? Можно ли генерировать самозаверяющие сертификаты на стороне клиента, а затем проверять их на сервере?