Настраивая сервер OpenVPN, я могу включить или основанную на сертификате аутентификацию или использование имени пользователя/аутентификации по паролю openvpn-plugin-auth-pam
плагин, но не оба одновременно.
Я включаю имя пользователя/аутентификацию по паролю следующим образом:
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login
client-cert-not-required
username-as-common-name
Но как только я добавляю следующие строки, мои клиенты настроили для остановки аутентификации сертификата работать со следующими сообщениями в журнале:
TLS Error: Auth Username/Password was not provided by peer
TLS Error: TLS handshake failed
Там какой-либо путь не состоит в том, чтобы потребовать имени пользователя/пароля от клиентов та аутентификация сертификата использования?
OpenVPN не поддерживает несколько одновременных методов аутентификации. Лучшее решение для этого, как упоминалось в комментариях, - запустить два экземпляра OpenVPN. Его сложнее запустить на том же компьютере, но это определенно выполнимо.
Однако, похоже, есть некоторые обходные пути, которые могут быть подходящими для вашей ситуации.
если вы знаете, для каких сертификатов требуется пароль. а какие нет, то ответ - да. используйте сценарий auth-user-pass-verify на стороне сервера для первой проверки DN сертификата (если вы также установите --username-as-common-name, тогда вы будете знать общее имя сертификата внутри скрипта проверки автоматически). если это сертификат, для которого вы знаете, что был введен пароль затем используйте pam для проверки имени пользователя и пароля. если вы знаете, что сертификат не содержит пароля, сценарий возвращает '0', чтобы разрешить доступ.
Обратите внимание, что нет способа автоматически определить, ввел ли пользователь в пароле сертификата или нет - это вне рукопожатия openssl и поэтому не известен серверу OpenVPN.
Источник: https://openvpn.net/archive/openvpn-users/2007-12/msg00179.html
Вы также можете интегрировать свой OpenVPN сгенерированные пары ключей на локальном сервере LDAP и использование вышеупомянутого сценария для аутентификации по LDAP с предоставленным сертификатом или использование предоставленных учетных данных при условии, что сертификат не был представлен.