Error 23 at 0 depth lookup certificate revoked

Система клиентского доступа в OpenVPN построена вокруг инфраструктуры открытых ключей (PKI) и основным средством идентификации пользователя является сертификат. Располагая действительным сертификатом клиент может подключиться к любому серверу, использующему сертификаты вашего центра сертификации (CA). Если доступ пользователя необходимо прекратить, то выданный...

OpenVPN-Revoking-Certificates-000.pngСистема клиентского доступа в OpenVPN построена вокруг инфраструктуры открытых ключей (PKI) и основным средством идентификации пользователя является сертификат. Располагая действительным сертификатом клиент может подключиться к любому серверу, использующему сертификаты вашего центра сертификации (CA). Если доступ пользователя необходимо прекратить, то выданный ему сертификат следует отозвать. В данной статье мы рассмотрим процесс отзыва сертификатов для различных версий Easy-RSA на платформах Windows и Linux, а также настройку OpenVPN севера для проверки сертификатов на отзыв.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Easy-RSA 2 Linux

Вторая версия Easy-RSA наиболее часто используется совместно с OpenVPN, так как входит в состав большинства актуальных на данный момент дистритбутивов. В нашем случае будет рассматриваться Ubuntu 18.04, но серьезных отличий с иными Linux системами нет, так как Easy-RSA это просто набор скриптов, облегачающий работу с OpenSSL.

Обычно корневая директория PKI находится в каталоге настроек OpenVPN — /etc/openvpn/easy-rsa, здесь и далее примем такое расположение как умолчание. Прежде чем выполнять отзыв, Easy-RSA потребуется немного настроить, откройте файл @openssl.conf и приведите к следующему виду строку:

RANDFILE = /etc/openvpn/easy-rsa/keys/.rnd

Ниже найдите опцию, которая задает срок действия списка отозванных сертификатов, по умолчанию это 30 дней, после чего его нужно будет перевыпустить, имеет смысл установить более длительный срок:

default_crl_days= 30

Сохраните изменения, после чего создайте указанный файл:

touch /etc/openvpn/easy-rsa/keys/.rnd

Теперь можно приступать к отзыву, для этих целей используется скрипт revoke-full. Перейдем в директорию Easy-RSA:

cd /etc/openvpn/easy-rsa

Загрузим переменные:

source ./vars

И выполним отзыв, для этого нам нужно знать CN (Commom Name) сертификата, в нашем случае это ivanov:

./revoke-full ivanov

OpenVPN-Revoking-Certificates-001.pngСообщение:

error 23 at 0 depth lookup: certificate revoked

не является ошибкой! Оно сообщает о том, что проверка сертификата не увенчалась успехом по причине его отзыва.

После выполнения данной команды впервые в каталоге /etc/openvpn/easy-rsa/keys появится файл crl.pem — список отозванных сертификатов. Данный файл будет обновляться после каждого успешного отзыва.

Easy-RSA 2 Windows

В Windows никаких дополнительных настроек производить не нужно, однако также рекомендуется увеличить срок действия CRL. Каталог Easy-RSA обычно располагается внутри каталога установки OpenVPN, по умолчанию это C:Program FilesOpenVPNeasy-rsa. Для измненения срока действия откройте файл openssl-1.0.0.cnf и измените опцию, указав нужное количество дней:

default_crl_days= 30

Затем перейдем в каталог Easy-RSA (так как он является системным, то командная строка должна быть запущена от имени Администратора):

cd "C:Program FilesOpenVPNeasy-rsa"

Загрузим переменные:

vars

Отзовем сертификат:

revoke-full ivanov

OpenVPN-Revoking-Certificates-002.pngРезультатом выполнения команды также будет создание или обновление файла списка отозванных сертификатов — crl.pem.

Easy-RSA 3 Linux

Новая версия Easy-RSA пока не имеет широкого распространения и присутствует в ограниченном количестве новых дистрибутивов, в частности в Debian 10. Приемы работы с ней значительно отличаются от Easy-RSA 2 и мы посвящали этому отдельную статью, в которой рассматривали в том числе и отзыв сертификатов.

В Easy-RSA 3 для отзыва сертификатов и создания/обновления списка отозванных сертификатов предназначены разные команды, поэтому вы можете сформировать CRL заранее и подключить его к конфигурации OpenVPN не дожидаясь отзыва.

Будем также считать, что директория Easy-RSA расположена в /etc/openvpn/easy-rsa, сразу перейдем в нее:

cd  /etc/openvpn/easy-rsa

Откроем файл vars, найдем и раскомментируем в нем следующую опцию, которая задает срок действия CRL, по умолчанию установлено 180 дней, укажите нужное вам значение:

set_var EASYRSA_CRL_DAYS 180

Затем сформируем список отозванных сертификатов:

./easyrsa gen-crl

Итогом выполнения данной команды будет появление файла crl.pem в директории pki.

Для отзыва сертификата выполните (предварительно перейдя в директорию Easy-RSA):

./easyrsa revoke ivanov

В данном случае вам потребуется явно подтвердить отзыв, введя yes на запрос утилиты.

OpenVPN-Revoking-Certificates-003.pngПосле отзыва сертификата вам потребуется обновить список CRL, для этого еще раз выполните:

./easyrsa gen-crl

Еще раз напомним, что для отзыва сертификатов мы должны указать их CN, поэтому при их создании задавайте им осмысленные имена, чтобы потом не пришлось угадывать, как называется сертификат Иванова: client123, client231 или client321. Также помните о том, что отзыв сертификата — действие необратимое, даже если вы повторно выпустите сертификат с этим же именем (CN), это будет совсем другой сертификат, который придется заново выдать пользователю.

Настройка OpenVPN для работы со списком отозванных сертификатов (CRL)

После того, как вы создали или обновили CRL (файл crl.pem) его следует скопировать в директорию с ключами OpenVPN сервера, это действие следует повторять после каждого отзыва сертификата (и обновления файла crl.pem).

Затем откроем конфигурацию сервера OpenVPN и добавим туда директиву, отвечающую за проверку отозванных сертификатов. В Linux:

crl-verify keys/crl.pem

В данном случае подразумевается, что ключи и CRL находятся в директории /etc/openvpn/keys.

В Windows:

crl-verify "C:\Program Files\OpenVPN\keys\crl.pem"  

Здесь мы также подразумеваем расположение каталогов по умолчанию, если это не так, то пути следует отредактировать.

При обновлении списка отозванных сертификатов достаточно просто скопировать с заменой файл crl.pem, если серверов несколько, то это нужно сделать на каждом из них.

После чего обязательно перезапустите службу OpenVPN сервера. Это нужно сделать потому, что OpenVPN перечитывает CRL один раз в час и в течении этого времени клиенты с отозванными сертификатами смогут продолжать подключаться и работать. В Linuх для этого выполните:

service openvpn restart

В Windows воспользуйтесь штатной оснасткой Службы.

Для клиента с отозванным сертификатом процесс подключения будет «зависать» на этапе согласования ключей и через 60 секунд выдавать в лог сообщение:

TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed

При этом клиент будет продолжать попытки подключения в соответствии со значениями опции keepalive. Если используется GUI, то клиент будет «вечно» висеть в желтом цвете.

OpenVPN-Revoking-Certificates-004.pngЧтобы ограничить число переподключений используйте в конфигурации клиента опцию:

connect-retry-max 25

Которая задает максимальное количество переподключений, в данном случае 25, однако вы должны указать ее заранее, передать на клиента с отозванным сертификатом вы ее не сможете. Мы рекомендуем всегда использовать эту опцию, когда вы настраиваете OpenVPN клиент на узлах, которые вы не контролируете, например, на домашних ПК или ноутбуках сотрудников.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Revoking a certificate means to invalidate a previously signed certificate so that it can no longer be used for authentication purposes.

Typical reasons for wanting to revoke a certificate include:

  • The private key associated with the certificate is compromised or stolen.
  • The user of an encrypted private key forgets the password on the key.
  • You want to terminate a VPN user’s access.

Example

As an example, we will revoke the client2 certificate, which we generated above in the «key generation» section of the HOW TO

First open up a shell or command prompt window and cd to the easy-rsa directory as you did in the «key generation» section above. On Linux/BSD/Unix:

. ./vars
./revoke-full client2

On Windows:

vars
revoke-full client2

You should see output similar to this:

Using configuration from /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Revoking Certificate 04.
Data Base Updated
Using configuration from /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
client2.crt: /C=KG/ST=NA/O=OpenVPN-TEST/CN=client2/emailAddress=me@myhost.mydomain
error 23 at 0 depth lookup:certificate revoked

Note the «error 23» in the last line. That is what you want to see, as it indicates that a certificate verification of the revoked certificate failed.

The revoke-full script will generate a CRL (certificate revocation list) file called crl.pem in the keyssubdirectory. The file should be copied to a directory where the OpenVPN server can access it, then CRL verification should be enabled in the server configuration:

crl-verify crl.pem

Now all connecting clients will have their client certificates verified against the CRL, and any positive match will result in the connection being dropped.

CRL Notes

When the crl-verify option is used in OpenVPN, the CRL file will be re-read any time a new client connects or an existing client renegotiates the SSL/TLS connection (by default once per hour). This means that you can update the CRL file while the OpenVPN server daemon is running, and have the new CRL take effect immediately for newly connecting clients. If the client whose certificate you are revoking is already connected, you can restart the server via a signal (SIGUSR1 or SIGHUP) and flush all clients, or you can telnet to the management interface and explicitly kill the specific client instance object on the server without disturbing other clients.

While the crl-verify directive can be used on both the OpenVPN server and clients, it is generally unnecessary to distribute a CRL file to clients unless a server certificate has been revoked. Clients don’t need to know about other client certificates which have been revoked because clients shouldn’t be accepting direct connections from other clients in the first place.

The CRL file is not secret, and should be made world-readable so that the OpenVPN daemon can read it after root privileges have been dropped.

If you are using the chroot directive, make sure to put a copy of the CRL file in the chroot directory, since unlike most other files which OpenVPN reads, the CRL file will be read after the chroot call is executed, not before.

A common reason why certificates need to be revoked is that the user encrypts their private key with a password, then forgets the password. By revoking the original certificate, it is possible to generate a new certificate/key pair with the user’s original common name.

В предыдущих статьях на тему OpenVPN я рассказывал как настроить openVPN сервер и клиентов для него с использованием личных сертификатов пользователей. Остался не раскрытым вопрос, что делать в случае если требуется отказать какому-либо клиенту в доступе по его сертификату. Причины могут разными — закрытый ключ, связанный с сертификатом скомпрометирован или украден, пользователь забыл пароль на ключ, либо просто хотите прекратить доступ данного человека в вашу сеть. Решением этой задачи является создание списка отзыва сертификатов (Certificate Revocation List — CRL), в котором перечисляются отозванные вами клиентские сертификаты и руководствуясь которым сервер будет отклонять запросы.

В качестве примера, отзовём сертификат пользователя client2. Пример будет для Linux/BSD/Unix.

cd /usr/local/etc/openvpn
. ./vars
./revoke-full client2

В результате видим примерно следующее:

Using configuration from /usr/local/etc/openvpn/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Revoking Certificate 04.
Data Base Updated

или

Using configuration from /usr/local/etc/openvpn/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
client2.crt: /C=RU/ST=NN/O=TEST/CN=client2/emailAddress=me@myhost.ru
error 23 at 0 depth lookup:certificate revoked

Обратите внимание на «Ошибку 23» в последней строке, указывающую на неудавшуюся попытку проверки отозванного сертификата. Скрипт revoke-full как раз и создает CRL (certificate revocation list) — crl.pem. Этот файл (не является секретным) должен быть скопирован в каталог, видимый OpenVPN сервером, а путь к нему прописан в конфиге server.conf.

crl-verify /usr/local/etc/openvpn/crl.pem

Теперь при подключении, все клиентские сертификаты будут проверяться на наличие в CRL, и если таковое будет найдено, в соединении будет отказано. При использовании crl-verify в OpenVPN, CRL-файл перечитывается по умолчанию каждый час. Таким образом, если в момент добавления сертификата в исключения, клиент уже установил связь, то он будет продолжать работу. Чтобы изменения применились наверняка перезапустите демон OpenVPN сервера.

При отзыве сертификата бывает ещё ошибка такого вида:

error on line 282 of config file '....openvpn/easy-rsa/openssl.cnf'

Решается комментированием следующих строчек в openssl.cnf:

#[ pkcs11_section ]
#engine_id = pkcs11
#dynamic_path = /usr/lib/engines/engine_pkcs11.so
#MODULE_PATH = $ENV::PKCS11_MODULE_PATH
#PIN = $ENV::PKCS11_PIN
#init = 0

Напоследок замечу, что возможно сгенерировать новую пару сертификат/ключ с тем же именем, как у отозванного ранее сертификата. Например в случае, когда пользователь забыл свой пароль на предыдущий сертификат, и его отозвали по этой причине.

Подписывайтесь на канал

Яндекс.Дзен

и узнавайте первыми о новых материалах, опубликованных на сайте.

Вот, что сказано в доке:

Revoking Certificates

Revoking a certificate means to invalidate a previously signed certificate so that it can no longer be used for authentication purposes.

Typical reasons for wanting to revoke a certificate include:

* The private key associated with the certificate is compromised or stolen.
* The user of an encrypted private key forgets the password on the key.
* You want to terminate a VPN user’s access.

Example

As an example, we will revoke the client2 certificate, which we generated above in the «key generation» section of the HOWTO.

First open up a shell or command prompt window and cd to the easy-rsa directory as you did in the «key generation» section above. On Linux/BSD/Unix:

. ./vars
./revoke-full client2

On Windows:

vars
revoke-full client2

You should see output similar to this:

Using configuration from /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = «yes»
Revoking Certificate 04.
Data Base Updated
Using configuration from /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = «yes»
client2.crt: /C=KG/ST=NA/O=OpenVPN-TEST/CN=client2/emailAddress=me@myhost.mydomain
error 23 at 0 depth lookup:certificate revoked

Note the «error 23» in the last line. That is what you want to see, as it indicates that a certificate verification of the revoked certificate failed.

The revoke-full script will generate a CRL (certificate revocation list) file called crl.pem in the keys subdirectory. The file should be copied to a directory where the OpenVPN server can access it, then CRL verification should be enabled in the server configuration:

crl-verify crl.pem

Now all connecting clients will have their client certificates verified against the CRL, and any positive match will result in the connection being dropped.

Содержание

OpenVPN

OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT-firewall, без необходимости изменения их настроек.

Варианты применения данной статьи

  • Хотим соединить в одну виртуальную сеть несколько локальных сетей в офисах, географически расположенных в разных местах, посредством Интернета.

  • Хотим иметь доступ в рабочую локальную сеть из дома или в поездке

  • Имея сервер с белым IP есть желание выходить в сеть с этого IP (например если этот IP за пределами страны или сети, в которой блокируются определенные ресурсы в Интернете)

Исходные данные

Локальная сеть 1

192.168.1.0/24 192.168.1.1
Белый внешний IP (здесь будет сервер OpenVPN)
Внутренний IP сервера OpenVPN - 192.168.1.100

Локальная сеть 2

192.168.0.0/24 192.168.0.1
Динамический IP (или даже серый - не важно для клиента OpenVPN)
Внутренний IP клиента OpenVPN - 192.168.0.100. Клиент в данном случае будет являться шлюзом для устройств в своей подсети.

Настройка OpenVPN

Все действия проводятся с правами суперпользователя root.

sudo -i

Установка

И на сервере и на клиенте ставим один и тот же пакет.

apt-get install openvpn

Создание сервера

Создание ключей и сертификатов

Защита соединения в OpenVPN в данном случае строится на использовании сертификатов и ключей для сервера и для клиентов.

apt-get install easy-rsa
mkdir /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa/2.0

Переходим в созданную директорию, где и займёмся генерацией ключей и сертификатов

cd /etc/openvpn/easy-rsa/2.0

Редактируем файл переменных

nano vars

Здесь можно заполнить например так:

# Почти в самом низу файла, заполняем информацию о сертификатах по умолчанию (ваши значения).
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Amur Region"
export KEY_CITY="Blagoveschensk"
export KEY_ORG="Organization"
export KEY_EMAIL="vash@email.tut"
export KEY_OU="MyOrganizationalUnit"
# PKCS11 я не использовал, поэтому оставил без изменений. Кто шарит нафига эта штука, допишите статью.
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234

#Добавить
export KEY_ALTNAMES="VPNsRUS"

копируем конфиг openssl

cp openssl-1.0.0.cnf openssl.cnf

Загружаем переменные

source ./vars

Очищаем от старых сертификатов и ключей папку keys и создаем серийный и индексные файлы для новых ключей

./clean-all

Создаем сертификат. По умолчанию поля будут заполняться данными, введенными ранее в vars, поэтому можно ничего не менять.

./build-ca

Создаем ключ сервера

FIXME A challenge password []: Если вы решили ввести challenge password, то необходимо убедиться, что сохранили этот пароль в безопасном месте. Если вам понадобится когда-нибудь переустановить этот сертификат, то потребуется ввести этот пароль снова.

./build-key-server server

В конце соглашаемся с запросом на подпись и добавление сертификата в базу.

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

Создаем ключ Диффи-Хеллмана

./build-dh

Cоздаем ключ для tls-аутификации

openvpn --genkey --secret keys/ta.key

Перемещаем сертификаты

cp -r /etc/openvpn/easy-rsa/2.0/keys/ /etc/openvpn/

Создание файла конфигурации сервера

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
cd /etc/openvpn
gunzip -d /etc/openvpn/server.conf.gz

nano /etc/openvpn/server.conf
port 1194
# Протокол может быть UDP или TCP, я выбрал 1-й вариант.
proto udp
# Если вы выберите протокол TCP, здесь должно быть устройство tap. Однако, это вариант я не проверял, поэтому ищите информацию отдельно. FIXME
dev tun

# Указываем где искать ключи
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key  # This file should be kept secret
dh /etc/openvpn/keys/dh2048.pem
# Для 12.04 dh1024.pem

# Задаем IP и маску виртуальной сети. Произвольно, но если не уверены лучше делайте как показано здесь
server 10.8.0.0 255.255.255.0

# Указыем, где хранятся файлы с настройками IP-адресов клиентов (создадим ниже)
client-config-dir /etc/openvpn/ccd

# Запоминать динамически выданные адреса для VPN-клиентов и при последующих подключениях назначать те же значения.
ifconfig-pool-persist /etc/openvpn/ipp.txt

# Указываем сети, в которые нужно идти через туннель (сеть-клиента).
route 192.168.0.0 255.255.255.0

# Включаем TLS
tls-server
tls-auth /etc/openvpn/keys/ta.key 0
tls-timeout 120
auth SHA1
cipher AES-256-CBC

# Если нужно, чтобы клиенты видели друг друга раскомментируйте
;client-to-client

keepalive 10 120

# Сжатие трафика. Для отключения используйте на сервере и клиенте comp-lzo no
comp-lzo

# Максимум клиентов
max-clients 10

user nobody
group nogroup

# Не перечитывать ключи, не закрывать и переоткрывать TUNTAP устройство, после получения SIGUSR1 или ping-restart
persist-key
persist-tun

status openvpn-status.log
log /var/log/openvpn.log
# Детальность логирования
verb 3
# Защита от повторов (максимум 20 одинаковых сообщений подряд)
mute 20

# Файл отозванных сертификатов. Разремить, когда такие сертификаты появятся.
;crl-verify /etc/openvpn/crl.pem

Создадим директорию для клиентских конфигов

mkdir /etc/openvpn/ccd

Можно запускать наш сервер OpenVPN

service openvpn restart

Смотрим список интерфейсов

ifconfig

Если среди прочих видим

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

значит VPN-сервер завелся. Если нет, то смотрим лог

tail -f /var/log/openvpn.log

Настройка маршрутизации на стороне сервера

Если сервер имеет «белый» IP то никакой маршрутизации на стороне сервера настраивать не нужно. Если сервер находится в локальной сети за NAT роутера то необходимо настроить маршрутизацию.
Для того, чтобы клиенты могли достучаться до сервера нужно пробросить порты с роутера на сервер. В разных моделях это делается по разному. Суть в том, чтобы стучась на внешний порт, например 12345 1), клиенты попадали на порт OpenVPN-сервера 1194 (или другой, который мы задали для нашего сервера).
Кроме того устройствам в локальной сети нужно сообщить, что для доступа к сети за OpenVPN-сервером нужно обращаться к нему. Но проще задать этот маршрут на роутере, который обслуживает локалку.

Создаем файл в каталоге ccd с тем же именем, что и ключ для клиента, т.е. /etc/openvpn/ccd/client

# Маршрут в сеть клиента. Требуется для доступа к сетевым устройствам в сети клиента. Если не требуется - не прописывайте.
iroute 192.168.0.0 255.255.255.0

# Задаем маршрут для клиента, чтобы он видел сеть за OpenVPN-сервером.
# Если маршрут требуется для всех подключаемых клиентов, достаточно эту
# строку прописать в конфигурационный файл сервера server.conf 
push "route 192.168.1.0 255.255.255.0"

Включаем ipv4_forwarding

В /etc/sysctl.conf расскомментируем #net.ipv4.ip_forward=1
после чего

sysctl -p

Создание клиента

Создание ключей и сертификатов

Ключи клиента создаются на сервере

Переходим в созданную директорию, где и замёмся генерацией ключей и сертификатов

cd /etc/openvpn/easy-rsa/2.0

Загружаем переменные

source vars

Создаем ключ клиента

В данном случае название ключа — client. Каждый ключ должен быть со своим именем.

./build-key client

Если хотим защитить ключ паролем, то генерируем его другой командой

./build-key-pass client

В этом случае при запуске соединения нужно будет каждый раз вводить пароль на ключ.

Теперь нужно не забыть скопировать ключи (ca.crt, client.crt, client.key, ta.key) на клиента OpenVPN в /etc/openvpn/keys/

Если планируется на клиенте импортировать файл настроек .ovpn вместе с сертификатами и ключами, например, для Android, важно в конфигурации клиента исключить строку tls-auth, вместо нее добавить key-direction 1. В противном случае будет ошибка вида tls error: incoming packet authentication failed from [af_inet].

Создание файла конфигурации клиента

/etc/openvpn/client.conf

client
dev tun
proto udp

# Внеший IP, на или за которым находится ваш сервер OpenVPN и порт (на сервере или роутере, за которым стоит сервер)
remote 111.222.333.444 1194

# необходимо для DynDNS
resolv-retry infinite

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/client.crt
key /etc/openvpn/keys/client.key
tls-client
tls-auth /etc/openvpn/keys/ta.key 1
auth SHA1
cipher AES-256-CBC
remote-cert-tls server
comp-lzo
persist-key
persist-tun

status openvpn-status.log
log /var/log/openvpn.log
verb 3
mute 20

ИЛИ единый файл конфигурации клиента client.ovpn с сертификатами и ключами для импорта

client
dev tun
proto udp

# Внеший IP, на или за которым находится ваш сервер OpenVPN и порт (на сервере или роутере, за которым стоит сервер)
remote 111.222.333.444 1194

# необходимо для DynDNS
resolv-retry infinite

tls-client

# Строка tls-auth /etc/openvpn/keys/ta.key 1, как выше говорилось, заменяется на 
key-direction 1

auth SHA1
cipher AES-256-CBC
remote-cert-tls server
comp-lzo
persist-key
persist-tun

verb 3
mute 20

# Далее идут сертификаты и ключи которые берутся из соответствующих файлов сгенерированных выше

# Из ca.crt
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>

# Из client.crt
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>

# Из client.key
<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>

# Из ta.key
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>

Можно запускать наш клиент OpenVPN

service openvpn restart

Настройка маршрутизации на стороне клиента

Машина с openvpn уже готова работать с сервером в чём можно убедится

ping -c 2 10.8.0.1
ping -c 2 192.168.1.100

Но для того, чтобы пользоваться туннелем в другой офис могли другие устройства в локальной сети нужно указать им, чтобы доступ в подсеть 192.168.1.0/24 осуществляется через 192.168.0.100. Или, что часто проще и быстрее прописать это правило маршрутизации на роутере, который является шлюзом для устройств в сети.

Включаем ipv4_forwarding

Также как в случае с сервером.

Настройка выхода в интернет с IP сервера

Если ваши цели были — только организовать VPN сеть или соединится с изолированной сетью (например из дома с локальной сетью на работе), то эта часть статьи вам не нужна.

Настройки сервера

Если же вы хотите организовать доступ из VPN сети в интернет с IP адреса сервера, то вам нужно настроить на сервере NAT.
Сделать это можно следующей командой (на сервере):

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Здесь мы указали, что сеть 10.8.0.0/24 будет выходить наружу через интерфейс eth0.

Для того что бы настройки iptables сохранились после перезагрузки нужно их дополнительно сохранить:

iptables-save > /etc/iptables.up.rules
echo "pre-up iptables-restore < /etc/iptables.up.rules" >> /etc/network/interfaces

Настройки клиента

К конфиге клиента client.conf нужно добавить строчку

redirect-gateway def1

Отзыв сертификата

cd /etc/openvpn/easy-rsa/2.0
. ./vars
./revoke-full client2

Если все прошло штатно вы должны увидеть следующий вывод, сообщающий о том, что сертификат отозван:

error 23 at 0 depth lookup:certificate revoked

Скрипт revoke-full создаст CRL-файл (certificate revocation list, список отозванных сертификатов) с именем crl.pem в подкаталоге keys. Файл должен быть скопирован в каталог, в котором сервер OpenVPN может получить к нему доступ. Ранее в конфиге мы прописали, что этот файл должен находится в /etc/openvpn, туда и копируем.

Отключение автозапуска OpenVPN

Это бывает полезно, например для клиента с ключем защищенным паролем, т.к. всё равно при старте системы такое соединение не поднимется в виду отсутствия пароля для ключа. Да и в том случае, если вы сделали ключ с паролем, значит, скорее всего, вам не нужно постоянное соединение.

nano /etc/default/openvpn

Раскомментируем строчку

AUTOSTART="none"

Тест производительности OpenVPN

Условия теста:

  1. VPN-сервер на ВМ Virtualbox (1 ядро i5-4670)

  2. Сеть гигабит (без шифрования последовательная скорость передачи 120 МБ/с). Скорость буду указывать в мегабайтах, НЕ в мегабитах!

  3. Форвардинг на хоста

  4. Клиент Windows 7, OpenVPN 2.3 64, FX-6300

Результаты:

  1. Скорость всегда упиралась в ВМ, где процессор бы полностью занят. ЦП клиента был загружен не более 10% — 40% на 1/6 ядер.

  2. С конфигом выше — 14 МБ/с

  3. Отключаем сжатие ;comp-lzo — прибавка не более 1 МБ/с — до 15 МБ/с

  4. Отключаем аутентификацию auth none +2 МБ/с — до 17 МБ/с

  5. Отключаем шифрование cipher none +2 МБ/с — до 19 МБ/с

  6. Сжатие comp-lzo сжимает хорошо сжимаемые файлы в 2 раза хуже, чем zlib, зато почти не влияет не загрузку ЦП (в десятки раз быстрее). Проверял на копировании установленного в Windows Libreoffice 5. Сжатие в zip с помощью архиватора 7z дало результат около 35%, сжатие comp-lzo по статистике сетевого интерфейса — около 70%.

Максимальный прирост при отключении сжатия, шифрования и аутентификации составил около 35%. Не думаю, что это стоит того, чтобы отключать механизмы защиты, но ситуации бывают разные.

Может кому-то как мне будет интересно влияние опций на производительность и не придется тратить время на проведение замеров, хотя я бы с удовольствием ознакомился с результами других людей. Изначально тестил для себя, поэтому точных замеров не проводил, потом решил поделиться результатами.

Источники

SourceForge logo

SourceForge logo

OpenVPN

Robust and flexible VPN network tunnelling

Brought to you by:
dazo,
djpig,
ericcrist,
jimyonan,
mattock

  • Summary

  • Reviews

  • Support

  • Git ▾

    • easy-rsa
    • openvpn
    • openvpn-historical-cvs
    • tap-windows
  • Mailing Lists

  • News

  • Donate

Menu

  • openvpn-announce

  • openvpn-builds

  • openvpn-commits

  • openvpn-devel

  • openvpn-users

Re: [Openvpn-users] revoke-full gives error


Re: [Openvpn-users] revoke-full gives error

From: Bonno Bloksma <b.blo…@ti…> — 2011-04-22 07:02:35

Hi Yevgeny,

>Bonno Bloksma wrote:
>> Did it revoke the certificate? If I look at the crl.pem file it seems 
>> it did.
>> What is that "error 23 at 0 depth lookup:certificate revoked"?

>Yes it did. Error 23 refers to revocation test and means it was really 
>revoked.

That's funny, to report success on a test as an error.
Or is that just a message string that never got properly inserted in the
(error) message database?

Bonno







View entire thread

Oh no! Some styles failed to load. 😵
Please try reloading this page

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Error 225 операция не была успешно завершена так как файл содержит вирус
  • Error 225 twrp
  • Error 27850 unable to manage networking component
  • Error 277 roblox utility tool
  • Error 27559 no blades were selected что это

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии