OpenVPN
Рассмотрена настройка OpenVPN в режиме "server" на сервере Alt linux P7 с SysVinit. В случае systemd есть отличия.
Пакеты
openvpn - полнофункциональное решение VPN на базе SSL
Размещение файлов
- /var/lib/openvpn/ — Корневой каталог после инициализации демона (chroot).
- /var/lib/openvpn/etc/openvpn/ccd — Каталог, в котором размещаются файлы особых параметров для подключаемых клиентов (Client Config Directory).
- /var/lib/openvpn/cache — Каталог для рабочих файлов после инициализации соединения. В файле конфигурации для таких файлов нужно писать путь /cache/файл
- /etc/openvpn/ — Каталог с файлами настройки.
- /etc/openvpn/ccd — Символическая ссылка на /var/lib/openvpn/etc/openvpn/ccd (файлы доступны и до, и после chroot). Требуется для отладки, когда openvpn запускается без chroot.
- /etc/openvpn/keys/ — Каталог для хранения ключей (точнее, для информации ограниченного доступа)
Особенности работы и конфигурации
Каждый файл конфигурации по маске /etc/openvpn/*.conf является конфигурацией отдельного экземпляра демона openvpn. Для имени экземпляра берётся имя файла без суффикса ".conf".
Настройки стартового скрипта располагаются в файле /etc/sysconfig/openvpn, по умолчанию он устанавливает следующие переменные окружения:
CHROOT=yes OPENVPNUSER=openvpn OPENVPNGROUP=openvpn MANUAL=""
Стартовый скрипт /etc/init.d/openvpn может запускать и останавливать как все экземпляры демона, так и каждый по отдельности. Значение переменной MANUAL в /etc/sysconfig/openvpn указывает экземпляры, которые не нужно автоматически запускать при старте системы (и при запуске стартового скрипта без параметра).
Для ручного запуска (остановки, проверки) одного экземпляра в конце командной строки указываем имя экземпляра. Например для экземпляра openvpn с конфигом /etc/openvpn/server.conf::
[root@kuvepus openvpn]# service openvpn start server Adjusting environment for openvpn: [ DONE ] Starting openvpn service: [ DONE ] [root@kuvepus openvpn]# service openvpn status client-one openvpn is stopped
Когда запускаем сервис, демон openvpn запускается, читает файл конфигурации из /etc/openvpn/, читает оттуда же файлы dh, ca и ключи. Этот каталог доступен демону только при его запуске.
Дальше демон выполняет chroot в /var/lib/openvpn/ и cd в /var/lib/openvpn/cache, понижает привилегии до пользователя openvpn, затем инициализирует работу с сетью.
- Размещение файлов
- Файл конфигурации в /etc/openvpn/.
- Все ключи в /etc/openvpn/keys/.
- CRL в /var/lib/openvpn/etc/openvpn/.
- Файлы настроек клиентов в /etc/openvpn/ccd/ или /var/lib/openvpn/etc/openvpn/ccd/ (сюда адресован симлинк).
- Файл параметров DH в /etc/openvpn/ или /etc/openvpn/keys/.
- Указанный в ifconfig-pool-persist файл демон читает и пишет от корня, в /etc/openvpn/ нужен подкаталог с правом записи для openvpn.
- Файл, указанный в status, демон с правами рута читает и пишет от корня (в /etc/openvpn)
- Совет.
Важно правильно указать права доступа. Ключи должны быть доступны только руту, конфигурации клиентов и файл отзывов сертификатов должны быть доступны на чтение пользователю openvpn:
# chown root:root /etc/openvpn/keys/* ; chmod 600 /etc/openvpn/keys/* # chown root:openvpn /var/lib/openvpn/etc/openvpn/ccd/* /var/lib/openvpn/etc/openvpn/*crl.pem ; chmod 640 /var/lib/openvpn/etc/openvpn/ccd/* /var/lib/openvpn/etc/openvpn/*crl.pem
В файле конфигурации указываем
- ifconfig-pool-persist и status — без полного пути либо с путём /cache/
- ca, dh, cert, key — с путём /etc/openvpn/keys/
- client-config-dir /etc/openvpn/ccd
- crl-verify - с путём относительно /var/lib/openvpn (например, файл копируем в /var/lib/openvpn/etc/openvpn/server.crl.pem, в конфиге указываем crl-verify /etc/openvpn/server.crl.pem)
- Совет.
Если нужны несколько экземпляров сервера openvpn, файлы в параметрах status, ifconfig-pool-persist и client-config-dir указывайте разные, например, с именем экземпляра в префиксе.
Пример
$ cat /etc/openvpn/server.conf port 1194 proto udp dev tun ca /etc/openvpn/keys/admin.ca dh /etc/openvpn/keys/dh4096.pem cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key comp-lzo server 192.168.254.0 255.255.255.0 tls-server cipher AES-256-CBC verb 3 mute 10 keepalive 10 60 user nobody group nogroup persist-key persist-tun status server_status.log ifconfig-pool-persist server_ipp.txt verb 3 management localhost 1194 push "route 192.168.1.0 255.255.255.0" client-config-dir /etc/openvpn/ccd route 192.168.2.0 255.255.255.0 route 192.168.3.0 255.255.255.0
Создание ключей
Создание ключей для OpenVPN тунеля средствами openssl утилиты. Проверено:(p7,p8 systemd, sysv)
Наличие в системе установленного пакета.
rpm -qa openssl openssl-1.0.1k-alt3.M70P.1
Открываем файл /var/lib/ssl/openssl.cnf и меняем значение параметра policy на:
policy = policy_anything
Это для того, чтобы можно было подписывать любые сертификаты. После чего создаем следующие папки и файлы:
mkdir -p /root/CA/demoCA cd /root/CA - далее все команды вводим находясь в данном каталоге /root/CA mkdir -p ./demoCA/newcerts touch ./demoCA/index.txt - текстовый файл база с действующими и отозванными сертификатами echo '01' > ./demoCA/serial - файл индекса для базы ключей и сертификатов echo '01' > ./demoCA/crlnumber - файл индекса для базы отозванных сертификатов
(без этого OpenSSL будет сильно ругаться, ответ кроется в файле /var/lib/ssl/openssl.cnf ).
less /var/lib/ssl/openssl.cnf - посмотреть файл (выход q)
Создадим "самоподписанный" сертификат my-ca.crt и закрытый ключ my-ca.pem, которыми мы будем заверять/подписывать ключи и сертификаты клиентов, желающих подключиться к нашему серверу.
openssl req -new -x509 -keyout my-ca.pem -out my-ca.crt
Generating a 2048 bit RSA private key
..................................................+++
................................................................................+++
writing new private key to 'my-ca.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
…
-----
Country Name (2 letter code) [RU]:RU
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (e.g., your name or your server's hostname) []:CA-ORG
Email Address []:
Подробнее:
- -req - запрос на создание сертификата,
- -x509 - создать самоподписанный сертификат стандарта X.509,
- -keyout - записать закрытый ключ в файл,
- -out - записать сертификат в файл.
В процессе создания, первым делом, нам предложат ввести пароль для закрытого ключа (крайне важно). Придумываем пароль, вводим, подтверждаем. Далее, будет задано несколько вопросов о том, кто мы такие. Вводим международное обозначение страны, например RU, UA, CN, далее указываем регион, город/село/деревню, название нашей организации, свои ФИО, адрес электронной почты. Все. Наш корневой "самоподписанный" сертификат готов к употреблению.
Далее, нам потребуется создать пару "ключ-сертификат" для сервера и каждого клиента, желающего подключиться к нашему серверу.
Создание ключа и запроса на подпись для сервера:
openssl req -new -nodes -keyout server.pem -out server.crs Generating a 2048 bit RSA private key ......................+++ ..........................................+++ writing new private key to 'server.pem' ----- ... ----- Country Name (2 letter code) [RU]:RU State or Province Name (full name) []: Locality Name (eg, city) []: Organization Name (eg, company) []: Organizational Unit Name (eg, section) []: Common Name (e.g., your name or your server's hostname) []:vpn-server Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
- -nodes - означает, что шифровать закрытый ключ не нужно (иначе при каждом запуске туннеля надо будет вводить пароль на ключ).
Так же вводим описание для владельца ключа, как и ранее.
И подписываем запрос на сертификат своим "самоподписанным" my-ca.crt сертификатом и ключом my-ca.pem:
openssl ca -cert my-ca.crt -keyfile my-ca.pem -days 3650 -in server.crs -out server.crt Using configuration from /var/lib/ssl/openssl.cnf Enter pass phrase for my-ca.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Aug 26 11:58:11 2015 GMT Not After : Aug 23 11:58:11 2025 GMT Subject: countryName = RU commonName = vpn-server X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: FA:E5:0B:67:9A:B9:03:18:8F:13:D1:30:FB:63:21:A1:83:8D:99:0C X509v3 Authority Key Identifier: keyid:65:29:B0:0A:8A:93:AA:4C:68:77:9F:6F:AF:FF:E8:FA:6B:11:27:BA Certificate is to be certified until Aug 23 11:58:11 2025 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
- -cert, корневой сертификат удостоверяющего центра
- -keyfile, секретный ключ удостоверяющего центра
Отвечаем два раза положительным "игреком" (y), в итоге, получаем связку "ключ-сертификат" для сервера server.
Теперь генерируем запрос на сертификат для пользователя:
openssl req -new -nodes -keyout user_1.pem -out user_1.crs
И подписываем запрос на сертификат своим "самоподписанным" my-ca.crt сертификатом и ключом my-ca.pem:
openssl ca -cert my-ca.crt -keyfile my-ca.pem -days 365 -in user_1.crs -out user_1.crt
Отвечаем два раза положительным "игреком" (y), в итоге, получаем связку "ключ-сертификат" для пользователя user_1.
Некоторые клиенты, например для Android, могут использовать бандл в формате pkcs12 вместо трёх отдельных файлов. Его тоже можно сделать:
openssl pkcs12 -export -out user_1.p12 -inkey user_1.pem -in user_1.crt -certfile my-ca.crt
Последние действие - создание параметров Диффи-Хеллмана (исключительно для сервера):
openssl gendh -out server.dh 2048
Файлы запросов на сертификаты можно удалить:
rm *.crs
В результате в каталоге /root/CA должен получиться такой набор файлов:
ls -l итого 40 drwxr-xr-x 3 root root 4096 авг 26 15:07 demoCA -rw-r--r-- 1 root root 1123 авг 26 14:47 my-ca.crt -rw-r--r-- 1 root root 1834 авг 26 14:47 my-ca.pem -rw-r--r-- 1 root root 4202 авг 26 14:58 server.crt -rw-r--r-- 1 root root 424 авг 26 15:14 server.dh -rw-r--r-- 1 root root 1708 авг 26 14:52 server.pem -rw-r--r-- 1 root root 4190 авг 26 15:07 user_1.crt -rw-r--r-- 1 root root 1708 авг 26 15:05 user_1.pem
Разносим ключи и сертификаты по каталогам сервера и клиента.
- my-ca.crt - для сервера и клиентов
- my-ca.pem - только для подписи сертификатов, лучше хранить на отдельном от OpenVPN сервера компьютере
- my-ca.crt, server.crt, server.dh, server.pem - для сервера OpenVPN
- my-ca.crt, user_1.crt, user_1.pem - для клиента OpenVPN
Для новых клиентов создать новые ключи и отдать комплектом my-ca.crt, новый_сертификат.crt, новый_ключ.pem.
В конфигурационном файле OpenVPN сервера размещаем ссылку на эти ключи (пути до ключей подставляем свои) :
ca /root/CA/my-ca.crt cert /root/CA/server.crt key /root/CA/server.pem dh /root/CA/server.dh
В конфигурационном файле OpenVPN клиента размещаем ссылку на эти ключи (пути до ключей подставляем свои):
ca /etc/net/ifaces/tun0/my-ca.crt cert /var/lib/ssl/certs/user_1.crt key /var/lib/ssl/private/user_1.pem
Смотрим базу ключей:
cat /root/CA/demoCA/index.txt V 250823115811Z 01 unknown /C=RU/CN=vpn-server V 160825120737Z 02 unknown /C=RU/CN=user_1
- v- действующий ключ (валидный)
Создание списка отзыва сертификатов
Для создания списка отзыва сертификатов необходимо выполнить следующую команду:
openssl ca -cert my-ca.crt -keyfile my-ca.pem -gencrl -out crl.pem
Просмотр crl.pem:
openssl crl -noout -text -in crl.pem Certificate Revocation List (CRL): Version 2 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: /C=RU/CN=CA-ORG Last Update: Aug 26 13:19:40 2015 GMT Next Update: Sep 25 13:19:40 2015 GMT CRL extensions: X509v3 CRL Number: 1 No Revoked Certificates. Signature Algorithm: sha1WithRSAEncryption 32:b5:de:eb:99:3c:30:7f:0d:11:7c:80:39:36:0d:d7:35:72: a3:6b:e8:b3:8f:de:3f:77:06:27:e0:68:ea:5c:25:ea:3d:92: 22:6e:d9:8a:11:28:4a:82:f4:95:cf:db:6c:51:f6:b1:f1:ca: 1e:34:a2:b6:21:18:a1:84:96:13:90:db:94:bc:a5:f3:19:5d: cb:09:df:49:b8:2d:3b:4f:23:3b:04:e3:fd:49:5b:1b:35:19: ce:a5:c4:2b:61:c4:58:70:94:32:8f:2a:85:ed:fb:d5:21:da: 8c:f1:29:0d:51:fb:22:17:fa:6b:21:37:81:b6:0d:cf:c9:8a: f9:19:a4:aa:d1:cd:33:6c:b7:eb:a3:bf:0d:5c:d7:87:e4:a5: 34:2e:2c:29:e2:86:50:8d:5d:80:ac:7f:bd:8d:34:5a:20:e9: f2:cc:77:d7:97:a3:14:3a:39:ab:14:5b:1c:67:23:76:19:b7: 31:15:4b:88:f2:cd:4a:4b:63:a6:ab:de:4d:7f:7d:23:49:1b: a1:36:c4:9f:62:86:6a:f2:77:22:cd:ff:73:ff:4c:b3:f0:c8: a7:68:4e:7e:26:a6:5f:55:4e:25:aa:7c:e8:e2:38:63:3a:d6: 15:76:02:8d:22:00:94:87:72:5d:e1:ed:44:35:7b:02:c6:bb: 9f:f2:76:0e
Отозвать серификат user_1.crt:
openssl ca -cert my-ca.crt -keyfile my-ca.pem -revoke user_1.crt -out crl.pem Using configuration from /var/lib/ssl/openssl.cnf Enter pass phrase for my-ca.pem: Revoking Certificate 02. Data Base Updated
Обновить список (обязательно после каждого отзыва сертификата):
openssl ca -cert my-ca.crt -keyfile my-ca.pem -gencrl -out crl.pem
Просмотр crl.pem:
openssl crl -noout -text -in crl.pem Certificate Revocation List (CRL): Version 2 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: /C=RU/CN=CA-ORG Last Update: Aug 26 13:30:36 2015 GMT Next Update: Sep 25 13:30:36 2015 GMT CRL extensions: X509v3 CRL Number: 3 Revoked Certificates: Serial Number: 02 Revocation Date: Aug 26 13:28:05 2015 GMT Signature Algorithm: sha1WithRSAEncryption 55:eb:cb:99:6e:01:e5:47:77:69:fc:ca:8b:d7:d0:8d:a2:5a: 2f:90:93:71:f7:d1:70:16:75:eb:99:fa:4a:8a:43:e9:79:7d: 43:f1:82:ac:7f:46:df:41:3b:39:59:ac:bc:5d:e1:79:85:03: 7d:72:cb:65:c8:2e:7c:54:ec:67:07:7d:3a:08:8b:87:64:b4: 7b:b7:dd:1c:a2:44:b1:ad:e5:76:fd:a3:10:b3:a7:81:fd:05: 34:3f:eb:20:66:d2:7d:77:a0:e5:79:f8:88:10:e5:bb:95:d8: f0:d2:92:c2:ae:0f:42:2b:34:09:f5:3d:73:7d:c8:42:ea:7b: dc:d9:3f:c2:f2:a8:8d:63:77:3d:89:37:0b:50:70:7e:0d:c2: 66:a5:03:61:b8:5e:25:98:9a:42:93:cf:38:74:3e:d3:a3:5c: 2f:6c:76:52:6c:c6:0e:24:72:71:40:34:98:06:50:08:a9:8f: 8f:66:05:3c:c2:f5:55:fe:14:d6:01:44:99:c2:8d:ce:41:c3: 42:1e:3f:8b:c0:7f:07:44:51:bd:1d:eb:bf:ca:6d:fa:31:77: f1:f5:69:30:11:b1:35:58:53:05:e2:7c:90:34:66:a1:58:1d: 78:ef:84:8b:22:23:d0:71:8f:84:9d:f7:53:f9:81:96:01:03: 60:73:1b:b2
Для Alt Linux файл crl.pem поместить в каталог /var/lib/openvpn
Создание ключей для OpenVPN тунеля средствами Easy-Rsa скриптов.
Утилита для работы с командной строкой (openssl) в OpenSSL является оболочкой для многих «подпрограмм», одна из которых является Easy-rsa.
Для OpenVPN версии выше 2.3 набор скриптов easy-rsa не входит в инсталляцию по умолчанию, а устанавливается отдельно.
Установим данный пакет, но для начала просмотрим кеш пакетов в системе, на наличие Easy-rsa пакета скриптов.
apt-get update && apt-cache search easy rsa | grep easy
easy-rsa - Simple shell based CA utility
Установим пакет:
apt-get install easy-rsa
Сделаем поиск по ключевому слову "easyrsa*" и посмотрим куда установилась утилита:
find / -name "easyrsa*"
/usr/bin/easyrsa /usr/share/easyrsa3
В OpenSSL есть пример файла openssl.cnf, который находится в соответствующей папке (название директории может изменяться от версии к версии). По умолчанию openssl утилита обращается к файлу /var/lib/ssl/openssl.cnf. В большинстве случаев (и особенно при тестировании) можно использовать как раз этот файл без каких-либо изменений. Если же вы планируете более плотно поработать с сертификатами, следует поподробнее ознакомиться с содержимым файла конфигурации. В нем есть несколько полезных параметров, например, местонахождение серийных номеров и списка отозванных сертификатов (Certificate Revocation List).
Однако некоторые записи из раздела [ CA_default ] ссылаются на директории и файлы, которые, в случае их отсутствия, могут привести к проблемам при развертывании центра сертификации, и вы должны создать все необходимые файлы и папки перед тем, как подписывать CSR. В составе OpenSSL идет простая утилита CA.pl, которая упрощает весь процесс (на самом деле просто создается структура директорий, на которые ссылается файл openssl.cnf)
Заглянем в каталог /usr/share/easyrsa3:
ls /usr/share/easyrsa3
openssl-1.0.cnf vars.example x509-types/
Файл openssl-1.0.cnf, является конфигуратором для утилиты openssl, запущенной через скрипты easy-rsa. В случае с использованием скриптов easy-rsa нам не нужно думать о создании инфраструктуры каталогов PKI (Public Key Infrastructure — Инфраструктура открытых ключей). Программа упрощает процесс создания инфраструктуры каталогов.
Перейдем в каталог в котором создадим инфраструктуру каталогов для ключей и сертификатов.
cd /root
Создать структуру каталогов:
easyrsa init-pki
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /root/pki
В текущей директории создается каталог pki c вложенными каталогами для ключей и запросов.
Дальнейшие действия необходимо выполнять в текущей директории, иначе утилита будет выводить ошибки из-за отсутствия pki каталога в текущей директории при запуске easyrsa команды.
Ключи центра сертификации.
Создать корневой сертификат. Обязательно ввести сложный пароль и Common Name сервера, например CA-ORG:
easyrsa build-ca
Generating a 2048 bit RSA private key ................................................................................................................................+++ ......................................................+++ writing new private key to '/root/pki/private/ca.key' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- ... ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]:CA-ORG CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /root/pki/ca.crt
Создать ключи Диффи-Хелмана:
easyrsa gen-dh
Создание ключа занимает некоторое продолжительное время.
Проверим содержание каталога pki
ls -l ./pki
итого 28 -rw------- 1 root root 1151 авг 27 09:32 ca.crt drwx------ 2 root root 4096 авг 27 09:32 certs_by_serial -rw------- 1 root root 424 авг 27 09:38 dh.pem -rw------- 1 root root 0 авг 27 09:32 index.txt drwx------ 2 root root 4096 авг 27 09:32 issued drwx------ 2 root root 4096 авг 27 09:32 private drwx------ 2 root root 4096 авг 27 09:28 reqs -rw------- 1 root root 3 авг 27 09:32 serial
- ca.crt - сертификат корневого центра сертификации
- dh.pem - ключ Диффи-Хелмана
- ./private/ca.key - секретный ключ центра сертификации
Ключи сервера.
Создать запрос на сертификат для сервера OVPN. Обращаю внимание, что сертификат будет не зашифрован (запаролен), за это отвечает параметр nopass, иначе при каждом старте OpenVPN будет запрашивать этот пароль:
easyrsa gen-req vpn-server nopass
Generating a 2048 bit RSA private key ....................................................+++ ..............+++ writing new private key to '/root/pki/private/vpn-server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [vpn-server]:vpn-server Keypair and certificate request completed. Your files are: req: /root/pki/reqs/vpn-server.req key: /root/pki/private/vpn-server.key
Создать сам сертификат сервера OVPN:
easyrsa sign-req server vpn-server (client | server) - это параметр предположительно берущий настройки из файла /usr/share/easyrsa3/x509-types/server
You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 3650 days: subject= commonName = \D0\BC\D0vpn-server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Using configuration from /usr/share/easyrsa3/openssl-1.0.cnf Enter pass phrase for /root/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'\0xFFFFFFC3\0xFFFFFF90\0xFFFFFFC2\0xFFFFFFBC\0xFFFFFFC3\0xFFFFFF90vpn-server' Certificate is to be certified until Aug 24 06:57:49 2025 GMT (3650 days) Write out database with 1 new entries Data Base Updated Certificate created at: /root/pki/issued/vpn-server.crt
Скопировать полученные ключи в рабочий каталог openvpn и в конфиге сервера указать полный путь к ключам.
cp ./pki/ca.crt /etc/openvpn/keys
cp ./pki/issued/vpn-server.crt /etc/openvpn/keys
cp ./pki/private/vpn-server.key /etc/openvpn/keys
cp ./pki/dh.pem /etc/openvpn/keys
Для создания пары ключ/сертификат минуя создания запросов и подписи необходимо выполнить команду:
easyrsa build-server-full vpn-server nopass - без пароля
easyrsa build-server-full vpn-server - с паролем
Ключи клиентам.
Процесс создания ключей клиентам аналогичен созданию ключей для сервера.
Создание запроса запароленного ключа для клиента (потребуется вводить при каждом подключении) с именем User:
easyrsa gen-req User
Если авторизация будет внешней (например ADшная), то пароль не потребуется. Создание запроса без парольного ключа для клиента:
easyrsa gen-req User nopass
Создание ключа пользователя (по дефолту сроком на 10 лет):
easyrsa sign-req client User
(client | server) - это параметр предположительно берущий настройки из файла /usr/share/easyrsa3/x509-types/client
Или cоздание ключа пользователя с ограничением действия сертификата в 90 дней (после истечения срока можно только перевыпустить):
./easyrsa sign-req client User -days 90
Клиенту передать эти файлы:
./pki/issued/User.crt
./pki/private/User.key
./pki/ca.crt
Для создания пары ключ/сертификат минуя создания запросов и подписи необходимо выполнить команду:
easyrsa build-client-full User nopass - без пароля
easyrsa build-client-full User - с паролем
Отзыв сертификатов
Генерация файла отозванных ключей:
easyrsa gen-crl
Сделать символическую ссылку в каталог с ключами (конечно, файл можно и скопировать, но придется делать каждый раз при отзыве сертификата):
ln -s /root/pki/crl.pem /var/lib/openvpn
В файл конфигурации openvpn сервера добавить строку
crl-verify 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 атаки, ошибка которого так выглядит в логах клиента:
WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
служит параметр remote-cert-tls server.
Список валидных и отозванных сертификатов можно посмотреть в файле ./pki/index.txt.
Начало строки описания каждого сертификата начинается с букв V или R, что значит Valid и Revoked (действующий и отозванный)
При помощи OpenSSL можно создать свой собственный центр сертификации и не прибегать к услугам коммерческих центров и тем самым сэкономить немного денег.
В документации утверждается, что средства по созданию своего собственного центра сертификации были разработаны лишь в демонстрационных целях. Их никогда не планировалось использовать для работы в боевых условиях. Выдержка из документации:
«Первоначальной цель утилиты ca - продемонстрировать на примере, как происходит подпись запроса в центре сертификации, и не предполагается ее использование в реальной жизни. Тем не менее, некоторые пользователи используют утилиту ca для подписи запросов»
Для нечастого использования – средства OpenSSL вполне подходят, однако если вы хотите создать что-то более масштабное, необходимо развернуть серьезную инфраструктуру по управлению сертификатами.
Базовая настройка для P8
Рассмотрим установку и настройку OpenVPN. Установим необходимые пакеты на сервере:
# apt-get install openvpn
Для настройки OpenVPN сервера мы будем использовать образец файла конфигурации OpenVpn:
Скопируйте из /usr/share/doc/openvpn-2.4.4/server.conf в директорию /etc/openvpn/ для его редактирования и последующего запуска сервера VPN.
Скопированный на предыдущем этапе файл server.conf является вполне работоспособной конфигурацией. Ее достаточно для нормальной работы сервера. Только стоит обратить внимание на имена и пути файлов сертификата сервера (.crt) и его ключа (.key), а также сертификата CA (.crt).
Начиная с версии 2.3 утилиту easy-rsa из пакета убрали, поэтому придется установить пакет отдельно:
# apt-get install easy-rsa
Генерируем все необходимые ключи и сертификаты. Вводим для них пароли.
easyrsa init-pki easyrsa build-ca easyrsa build-server-full server easyrsa build-client-full client1 easyrsa gen-dh
Переносим полученные ключи и сертификаты в каталог /etc/openvpn/keys/. Далее запускаем сервер OpenVPN:
openvpn /etc/openvpn/server.conf
Сервер успешно запущен.
Настроим openVPN клиент:
Скопируйте из /usr/share/doc/openvpn-2.4.4/client.conf в директорию /etc/openvpn/ для его редактирования и последующего запуска клиента VPN. Так же не забываем скопировать раннее сгенерированные ключи и сертификаты в директорию /etc/openvpn/keys/ и указать их в client.conf.
Открываем client.conf ищем строку remote и меняем ее на:
remote 10.10.3.87 1194 где 10.10.3.87 ip вашего vpn сервера.
Запускаем клиент OpenVPN:
openvpn /etc/openvpn/client.conf
Клиент успешно запущен.
Между клиентом и сервером получится виртуальная сеть. На этом настройка OpenVPN завершена.