Мой друг говорит, что ключи (частные и общедоступные) для клиентов должны генерироваться на сервере и каким-то образом доставляться клиенту при настройке нового клиента для сети на основе OpenVPN.
Разве не было бы безопаснее сгенерировать ключи на клиенте и просто отправить открытый ключ без личного ключа на сервер? Или есть какая-то причина, по которой серверу также нужен закрытый ключ клиента?
(Я новичок во всем этом шифровании, поэтому могу ошибаться.)
Ты совершенно прав.
Вся идея PKI заключается в том, что открытый ключ (или сертификат) содержит все, что требуется третьей стороне (в данном случае вашему VPN-серверу) для проверки его подлинности. Закрытый ключ требуется только клиенту для подписания этих проверочных запросов.
Хотя это может сделать процесс регистрации новых пользователей более долгим. Создавая каждый клиент свой собственный закрытый ключ и запрос на подпись сертификата, вы ограничиваете распространение закрытых ключей и значительно повышаете безопасность.
Еще лучшим решением является размещение закрытых ключей, сгенерированных пользователями / клиентами, на двухфакторный жетоны. Почти все они содержат встроенные механизмы RSA, которые позволяют им безопасно генерировать закрытый ключ и оговаривают, что он никогда не сможет покинуть токен.
Вы правы в отношении сертификатов - однако для большинства пользователей задача создания сертификата и CSR выходит далеко за рамки того, что они смогут сделать без серьезного вмешательства.
В таких обстоятельствах может быть проще настроить пару ключей централизованно и безопасно передать ключ пользователю в процессе настройки.