Можно ли настроить аутентификацию с использованием открытых и закрытых ключей в OpenVPN?

Как можно настроить аутентификацию в OpenVPN таким образом, чтобы она функционировала аналогично SSH, где у каждого пользователя есть пара открытого и закрытого ключей, а на сервере OpenVPN хранится список открытых ключей пользователей, которым предоставлен доступ?
  • 21 января 2025 г. 15:44
Ответы на вопрос 3
Да, в OpenVPN можно настроить аутентификацию с использованием открытых и закрытых ключей, подобно тому, как это делается в SSH. Однако нужно помнить, что OpenVPN традиционно использует сертификаты для аутентификации. Тем не менее, можно организовать аутентификацию на основе ключей.

### Основные шаги для настройки аутентификации в OpenVPN с использованием ключей:

1. **Создание инфраструктуры PKI**:
   - Для создания ключей и сертификатов потребуется OpenSSL.
   - Создайте корневой сертификат (CA).
   - Создайте сертификаты для сервера и клиентов.

2. **Настройка сервера OpenVPN**:
   - Настройте серверный конфигурационный файл (`server.conf` или `server.ovpn`).
   - Укажите пути к CA, серверным сертификату и закрытому ключу.
   - Для включения аутентификации клиентов можно добавить параметр `client-cert-not-required`, если вы хотите использовать только открытые ключи для аутентификации, а не двухстороннюю аутентификацию.

3. **Создание клиентских файлов конфигурации**:
   - Создайте файл конфигурации для каждого клиента. Укажите путь к клиентскому сертификату и закрытому ключу.
   - Если вы хотите использовать открытые ключи, вам потребуются соответствующие изменения в конфигурации.

4. **Настройка аутентификации с использованием пользовательских скриптов**:
   - Вы также можете настроить OpenVPN для работы с пользовательскими скриптами аутентификации, что позволит использовать открытые ключи для аутентификации по аналогии с SSH. Например, пишите скрипт, который будет проверять наличие открытого ключа в списке разрешенных на сервере.

### Пример конфигурации

**Сервер `server.conf`**:

```bash
port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh.pem

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

client-to-client
keepalive 10 120
cipher AES-256-CBC
persist-key
persist-tun

status openvpn-status.log
verb 3

# Аутентификация по ключам
client-cert-not-required
```

**Клиент `client.ovpn`**:

```bash
client
dev tun
proto udp
remote your.server.ip 1194

ca ca.crt
cert client.crt
key client.key

cipher AES-256-CBC
verb 3
```

### Важно:

- Обратите внимание, что при использовании сертификатов и ключей следует учитывать безопасность и политику управления ключами.
- Убедитесь, что все файлы сертификатов и ключей имеют правильные права доступа, чтобы предотвратить несанкционированный доступ.

С внедрением таких настроек аутентификация пользователей будет аналогична SSH, обеспечивая безопасность соединений с OpenVPN.
Много чем можно воспользоватся на стороне сервера: 
1. AuthorizedKeysCommand -- проверять скриптом
2. AllowUsers/DenyUsers/AllowGroups/DenyGroups -- конкретно указать кого именно не хотите
3. AuthorizedPrincipalsCommand/AuthorizedPrincipalsFile -- работать с authorized_keys
4. Завести для ssh собственный встроенный CA
5. Через PAM
Cерты пользователям можно включать непосредственно в конфигурацию, называется это inline certificates 
1 Отозвать серт можно тем же easy-rsa которым он генерился
2 Обновится файл .crl со списком отзыва
3 Делаем reload для openvpn чтобы сервер перечитал изменения в файлах конфигурации
Похожие вопросы