OpenVPN: различия между версиями
(описал /etc/sysconfig/openvpn) |
(/Создание ключей средствами openssl утилиты; требует доработки и редактирования опытными тестерами/) |
||
Строка 75: | Строка 75: | ||
route 192.168.2.0 255.255.255.0 | route 192.168.2.0 255.255.255.0 | ||
route 192.168.3.0 255.255.255.0 | route 192.168.3.0 255.255.255.0 | ||
=== Создание ключей === | |||
<blockquote>Создание ключей для OpenVPN тунеля средствами openssl утилиты.</blockquote> | |||
Наличие в системе установленного пакета. | |||
'''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''' | |||
<span style="font-size:1.0em">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 []:</span> | |||
Подробнее: | |||
* '''-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. | |||
Последние действие - создание параметров Диффи-Хеллмана (исключительно для сервера): | |||
'''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'''- действующий ключ (валидный) | |||
<blockquote>Создание списка отзыва сертификатов</blockquote> | |||
Для создания списка отзыва сертификатов необходимо выполнить следующую команду: | |||
'''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 | |||
Для AltLinux файл '''crl.pem''' поместить в каталог '''/var/lib/openvpn''' | |||
[[Категория:ALT Linux Office Server]] | [[Категория:ALT Linux Office Server]] | ||
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}} |
Версия от 20:38, 26 августа 2015
Рассмотрена настройка OpenVPN в режиме "server" на сервере Altlinux P7 с SysVinit. В случае systemd есть отличия.
Пакеты
openvpn - полнофункциональное решение VPN на базе SSL
Размещение файлов
- /var/lib/openvpn/ — Корневой каталог после инициализации демона (chroot).
- /var/lib/openvpn/etc/openvpn/ccd — Каталог, в котором размещаются файлы особых параметров для подключаемых клиентов (Client Config Directory).
- /var/lib/openvpn/cache — Рабочий каталог, является текущим для работы демона после инициализации (в него демон записывает файлы, у которых не указан путь - ipp и status).
- /etc/openvpn/ — Каталог с файлами настройки.
- /etc/openvpn/ccd — Символическая ссылка на /var/lib/openvpn/etc/openvpn/ccd (файлы доступны и до, и после 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 указывает экземпляры, которые нужно запустить при старте системы (и при запуске стартового скрипта без параметра).
Для ручного запуска (остановки, проверки) одного экземпляра в конце командной строки указываем имя экземпляра. Например:
[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, файлы настроек клиентов - в /etc/openvpn/ccd/ или /var/lib/openvpn/etc/openvpn/ccd/. В файле конфигурации указываем
- ifconfig-pool-persist и status — без полного пути либо с путём /cache/
- ca, dh, cert, key — с путём /etc/openvpn/keys/
- client-config-dir /etc/openvpn/ccd
- Совет.
Если нужны несколько экземпляров сервера openvpn, файлы в параметрах status и ifconfig-pool-persist указывайте разные, например, с именем экземпляра в префиксе.
Пример
$ 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 утилиты.
Наличие в системе установленного пакета.
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.
Последние действие - создание параметров Диффи-Хеллмана (исключительно для сервера):
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
Для AltLinux файл crl.pem поместить в каталог /var/lib/openvpn