OpenVPN: Настройка на собственном сервере. Часть 1 — сертификаты.
- OpenVPN: Настройка на собственном сервере. Часть 0 — подготовка системы.
- OpenVPN: Настройка на собственном сервере. Часть 1 — сертификаты.
- OpenVPN: Настройка на собственном сервере. Часть 2 — конфигурация сервера.
- OpenVPN: Настройка на собственном сервере. Часть 3 — iptables
- OpenVPN: Настройка на собственном сервере. Часть 4 — конфигурация клиента.
Первоначальная настройка успешно завершена и нам необходимо позаботится о безопасности. Т.е. о сертификатах, с которыми будут работать клиенты и сервер.
Для этого нужно три компонента:
- Корневой сертификат (назовем его для простоты CA), которым будут подписываться ключи клиента и сервере. Крайне желательно чтобы он был на отдельной машине.
- Сертификат сервера, который будет подписан корневым доверительным сертификатом.
- Сертификат для каждого из клиентов, который тай жэ будет подписан CA
Корневой сертификат и сертификат сервера
Создаем корневой центр собственной сертификации (лучше делать это не на той машине, где запуен openvpn и там должен быть установлен пакет easy-rsa)
$ cp -R /usr/share/easy-rsa/3.0.0/ ~/CA
$ cp /usr/share/doc/easy-rsa/vars.example ~/CA/vars
$ cd ~/CA
Нужно отредактировать vars и поправить те параметры, которые будут вам интересны. Это имя домена, имя сервера и прочее - все подробно прокомментировано в файле.
Инициализировать PKI (Public Key Infrastructure — Инфраструктура открытых ключей):
$ ./easyrsa init-pki
Создать корневой сертификат. Common Name сервера вводить на ваше успотрение. (лучше придумать что-то вроде vpn-server). Сложный пароль ключа обязателе. Не менее 128 бит.
$ ./easyrsa build-ca
Создать ключи Диффи-Хелмана
$ ./easyrsa gen-dh
Создать запрос на сертификат для сервера OVPN. Обращаю внимание, что сертификат будет незапаролен (параметр nopass), иначе при каждом старте OpenVPN будет запрашивать этот пароль.
$ ./easyrsa gen-req vpn-server nopass
Создать и подписать сертификат
$ ./easyrsa sign-req server vpn-server
Скопировать полученные ключи в рабочий каталог openvpn
$ sudo mkdir -p /etc/openvpn/keys
$ sudo mkdir cp ~/CA/pki/ca.crt /etc/openvpn/keys
$ sudo mkdir cp ~/CA/pki/issued/vpn-server.crt /etc/openvpn/keys
$ sudo mkdir cp ~/CA/pki/private/vpn-server.key /etc/openvpn/keys
$ sudo mkdir cp ~/CA/pki/dh.pem /etc/openvpn/keys
Создать «HMAC firewall» для защиты от DoS аттак и флуда UDP порта.
$ cd /etc/openvpn/keys/
$ sudo openvpn --genkey --secret ta.key
Генерация пользовательских ключей
Создание запроса запароленного ключа для клиента (потребуется вводить при каждом подключении) с именем User
$ cd ~/CA
$ ./easyrsa gen-req User
User - это имя пользователя для которого вы генерируете ключ.
При такой генерации при каждом подключении будет запрашиваться пароль.
Если вам не требуется такого уровня. Или авторизация будет осуществляться иными методами, то генерируйте ключ без пароля.
$ ./easyrsa gen-req User nopass
Теперь ключ надо подписать
$ ./easyrsa sign-req client User
Дефолтно ключ выдается на 10 лет. Можно ограничить время. И ключи придется только перевыпускать по завершению работы.
$./easyrsa sign-req client User -days 90
Клиенту потребуется следующий набор файлов
~/CA/pki/issued/User.crt
~/CA/pki/private/User.key
~/CA/pki/ca.crt
/etc/openvpn/keys/ta.key
Отзывы сертификатов
Герируем файл отозванных ключей
$ cd ~/CA
$ ./easyrsa gen-crl
Если вы все же сделали центр сертификации на той же машине, на которой у вас сервер, то можете слинковать файл отозванных ключей. Но лучше скопировать. И эту операцию нужно повторять каждый раз при отзыве ключей.
$ sudo cp ~/CA/pki/crl.pem /etc/openvpn/keys
В /etc/openvpn/server.conf добавить строку
crl-verify /etc/openvpn/keys/crl.pem
Отзыв сертификата пользователя User
$ ./easyrsa revoke User
Каждый раз при отзыве сертификата необходимо обновлять crl.pem, чтобы внести в него изменения
$ ./easyrsa gen-crl
Примечание: одноименный файл ключа не может быть создан пока не отозван старый. При попытке создать сертификат с уже имеющимся именем выдаст ошибку
failed to update database
Easy-RSA error:
signing failed (openssl output above may have more detail)
Для исключения возможности mitm атаки, ошибка которого так выглядит в логах клиента как показано ниже служит параметр remote-cert-tls server в конфиге клиента.
WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Ссылки:
Категории: HowTo