OpenVPN: настройка SSL и hostname

Автор: | 02/26/2019
 

Доводим до ума наш OpenVPN.

У нас он уже в продакшене, пользуемся.

Вкусно, просто, удобно. Встроенная поддержка ACL вообще замечательна, но о ней, может быть, в другом посте.

Сейчас надо настроить SSL, что бы браузеры и клиенты не ругались.

Документация по настройке SSL в OpenVPN AS — тут>>>.

Let’s Encrypt

Устанавливаем Let’s Encrypt клиент:

root@openvpnas2:~# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Открываем порт 80 в AWS Security Group — это безопасно, т.к. сам OpenVPN AS слушает только порт 443 для клиентов и 943 — для доступа в админпанель.

Получаем сертификат:

root@openvpnas2:~# /opt/letsencrypt/letsencrypt-auto certonly -d vpn.example.com
...
1: Spin up a temporary webserver (standalone)
...
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/vpn.example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/vpn.example.com/privkey.pem

SSL в OpenVPN

Изменить сертификат в базе данных конфигурации OpenVPN можно через Admin UI в разделе Web Server Configuration, либо с помощью CLI.

При первом запуске — OpenVPN AS генерирует self-signed сертификаты, которые хранятся в каталоге /usr/local/openvpn_as/etc/web-ssl/:

root@openvpnas2:~# ls -l /usr/local/openvpn_as/etc/web-ssl/
total 16
-rw-r--r-- 1 root root 1111 Feb 21 14:50 ca.crt
-rw------- 1 root root 1708 Feb 21 14:50 ca.key
-rw-r--r-- 1 root root 1082 Feb 21 14:50 server.crt
-rw------- 1 root root 1704 Feb 21 14:50 server.key

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

Для настройки SSL потребуется три файла, в случае с Let’s Encrypt это будут:

  • *.crt — это наш fullchain.pem файл
  • *.keyprivkey.pem файл
  • *.bundle — создадим из fullchain.pem и privkey.pem

Проверяем файлы сертификата от Let’s Ecncrypt:

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# ls -l
total 4
lrwxrwxrwx 1 root root  42 Feb 22 10:56 cert.pem -> ../../archive/vpn.example.com/cert1.pem
lrwxrwxrwx 1 root root  43 Feb 22 10:56 chain.pem -> ../../archive/vpn.example.com/chain1.pem
lrwxrwxrwx 1 root root  47 Feb 22 10:56 fullchain.pem -> ../../archive/vpn.example.com/fullchain1.pem
lrwxrwxrwx 1 root root  45 Feb 22 10:56 privkey.pem -> ../../archive/vpn.example.com/privkey1.pem

Устанавливаем ключ:

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# /usr/local/openvpn_as/scripts/sacli --key "cs.priv_key" --value_file "privkey.pem" ConfigPut
[True, {}]

Устанавливаем публичную часть:

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# /usr/local/openvpn_as/scripts/sacli --key "cs.cert" --value_file "fullchain.pem" ConfigPut
[True, {}]

Создаём bundle:

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# cat fullchain.pem privkey.pem > bundle.pem

Загружаем его в базу настроек OpenVPN AS:

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# /usr/local/openvpn_as/scripts/sacli --key "cs.ca_bundle" --value_file "bundle.pem" ConfigPut
[True, {}]

Перезапускаем сервис:

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# /usr/local/openvpn_as/scripts/sacli start
RunStart warm None
{
"errors": {},
"service_status": {
"api": "on",
"auth": "on",
"bridge": "on",
"client_query": "restarted",
"crl": "on",
"daemon_pre": "on",
"db_push": "on",
"ip6tables_live": "on",
"ip6tables_openvpn": "on",
"iptables_live": "on",
"iptables_openvpn": "on",
"iptables_web": "restarted",
"license": "on",
"log": "on",
"openvpn_0": "on",
"openvpn_1": "on",
"user": "on",
"web": "restarted"
}
}
WILL_RESTART ['web', 'client']

Проверяем:

OpenVN hostname

Последним шагом, если не было сделано во время установки — меняем имя хоста в Network Settings:

Готово.