OpenVPN: различия между версиями

Материал из ALT Linux Wiki
(→‎Создание ключей: добавлено про pkcs12)
Строка 210: Строка 210:


Отвечаем два раза положительным "игреком" (y), в итоге, получаем связку "ключ-сертификат" для пользователя user_1.  
Отвечаем два раза положительным "игреком" (y), в итоге, получаем связку "ключ-сертификат" для пользователя user_1.  
Некоторые клиенты, например для Android, могут использовать бандл в формате pkcs12 вместо трёх отдельных файлов. Его тоже можно сделать:
'''openssl pkcs12 -export -out user_1.p12 -inkey user_1.pem -in user_1.crt -certfile my-ca.crt'''


Последние действие - создание параметров Диффи-Хеллмана (исключительно для сервера):
Последние действие - создание параметров Диффи-Хеллмана (исключительно для сервера):

Версия от 23:55, 6 апреля 2020

Рассмотрена настройка OpenVPN в режиме "server" на сервере Alt linux P7 с SysVinit. В случае systemd есть отличия.

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Пакеты

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 завершена.