Я настраиваю сервер OpenVPN для своей организации и читаю о различных способах работы ключей на стороне клиента. Я все еще немного не знаком со всеми концепциями, лежащими в основе этих клиентских ключей и аутентификации учетной записи.
Чтобы ответить на каждый из ваших пунктов:
1 - Вы правы, сравнивая парольную защиту ключей OpenVPN с парольной защитой ключей SSH.
2 - Без использования какого-либо дополнительного метода аутентификации OpenVPN полагается только на проверку сертификата клиента сервером (а в идеале - проверку сертификата сервера клиентом) для аутентификации клиента. Это позволяет отменить доступ отдельного клиента либо путем добавления сертификата клиента в список отзыва сертификатов (CRL) (поддерживается версиями 1.5 и выше OpenVPN), либо удаления ключевого материала с клиента (или переключения сертификатов на всех ваших другие клиенты). Если вы не используете дополнительный метод аутентификации, вам потребуется CRL, чтобы разрешить отзыв клиентского доступа.
Имейте в виду, что защита ключей паролем совершенно не поможет вам при повторной аутентификации. Этот пароль просто «разблокирует» ключ на клиентском устройстве - он не снимает проблему дополнительной аутентификации пользователя на клиенте на сервере (и проблему отзыва доступа).
3 - Вы должны генерировать пары закрытого / открытого ключей на самих клиентах, а не передавать их по сети. Вы можете сгенерировать запрос сертификата на клиенте, отправить открытый ключ (в запросе на подпись сертификата) в свой центр сертификации для подписи и установить подписанный сертификат на клиенте. Все это может быть написано сценарием, и я уверен, что кто-то уже это сделал (и я надеюсь, что коммерчески лицензированный продукт OpenVPN, вероятно, имеет некоторые из этих встроенных функций).
Я нахожу это Мастер моего сертификата проект, который был написан именно для этой цели, но я бы написал сценарий всего этого на клиенте с помощью инструментов командной строки OpenSSL, чтобы сделать весь процесс практически невидимым для пользователя.