Создание центра сертификации
Добавлено: 14 июл 2016, 19:24
Создание инфраструктуры публичных ключей PKI
На первом шаге создайте инфраструктуру публичных ключей (Public Key Infrastructure, PKI):
$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki
Вы увидите сообщение:
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/ca/easy-rsa-master/easyrsa3/pki
В результате выполнения команды init-pki был создан каталог /home/ca/easy-rsa-master/easyrsa3/pki, где и находится инфраструктура публичных ключей PKI.
На втором шаге с помощью команды build-ca создайте удостоверяющий центр CA:
$ ./easyrsa build-ca
В ответ на эту команду вам будет предложено ввести пароль и так называемое имя Common Name:
Generating a 2048 bit RSA private key
.....+++
................................................................+++
writing new private key to '/home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key'
Enter PEM pass phrase:********
Verifying - Enter PEM pass phrase:********
----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) [Easy-RSA CA]:ca.mydomain.ru>
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/ca/easy-rsa-master/easyrsa3/pki/ca.crt
Пароль будет защищать приватный ключ удостоверяющего центра, созданный в формате PEM (Privacy Enhancement for Internet Electronic Mail). Этот пароль потребуется каждый раз, когда вы будете подписывать в удостоверяющем центре сертификаты для серверов и клиентов OpenVPN.
Чтобы избавиться от необходимости ввода пароля, можно при запуске команды build-ca задать опцию nopass:
$ ./easyrsa build-ca nopass
Учтите, что злоумышленник сможет легко воспользоваться украденным ключом, созданным без пароля.
В качестве Common Name задайте, например, доменное имя, выделенное для удостоверяющего центра CA, имя пользователя или хоста сервера CA.
Для удостоверяющего центра команда build-ca создаст два файла:
/home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key
/home/ca/easy-rsa-master/easyrsa3/pki/ca.crt
Файл ca.key представляет собой приватный ключ центра CA, он секретный, и его нельзя переносить на другие узлы вашей сети.
Файл сертификата удостоверяющего центра ca.crt, напротив, открытый, и он будет нужен на узлах серверов и клиентов OpenVPN. Запишите файл ca.crt на USB флэш-диск, чтобы перенести на другие узлы.
Создание списка отзывов сертификатов
Если сотрудник уволился, необходимо заблокировать его доступ в сеть VPN компании. Специально для этой цели в OpenVPN предусмотрен список отзыва сертификатов CRL. Создайте его такой командой:
$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa gen-crl
У вас будет запрошен пароль доступа к приватному ключу ca.key удостоверяющего центра. Список отзыва сертификатов будет создан в файле /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem.
Скопируйте этот файл на USB флэш-диск:
# cp /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem /mnt/flash
Если нужно заблокировать выданный ранее сертификат, воспользуйтесь следующей командой:
$ ./easyrsa revoke developer5
Здесь мы отозвали сертификат для клиента developer5. Далее нужно скопировать новый файл CRL на сервер OpenVPN и перезапустить демон OpenVPN.
Созданные файлы и каталоги PKI
В табл. 2 мы привели краткое описание некоторых файлов и каталогов PKI, созданных в результате наших действий.
Таблица 2. Структура каталога PKI.
Файл или каталог Описание
ca.crt Сертификат удостоверяющего центра CA, не секретный
crl.pem Список отзыва сертификатов CRL
issued Каталог с сертификатами, созданными удостоверяющим центром CA, не секретный
private Каталог с секретными приватными ключами
Reqs Каталог запросов на сертификаты, не секретный
Справка по утилите Easy-RSA
Запустите утилиту Easy-RSA без параметров:
$ ./easyrsa
На экране появится список всех команд утилиты, а также полный путь к программе и к PKI.
Для того чтобы получить справку по нужной команде, добавьте опцию help. Например, так можно получить справку по команде build-ca:
$ ./easyrsa help build-ca
Генерация файла Диффи-Хелмана
Создайте ключи Диффи-Хелмана следующей командой:
$ cd /home/vpnoperator/easy-rsa-master/easyrsa3
$ ./easyrsa gen-dh
Команда gen-dh работает довольно долго. По завершении вы увидите сообщение:
DH parameters of size 2048 created at /home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem
Скопируйте файл/home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem в каталог /etc/openvpn/ :
# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem /etc/openvpn
Подготовка сертификата и ключа для сервера OpenVPN
Помимо openssl.cnf и openvpn.conf в каталоге /etc/openvpn/ нам потребуются файлы, перечисленные в табл. 3.
Таблица 3. Файлы для сервера OpenVPN.
Файл Описание
dh.pem Файл Диффи-Хелмана для защиты трафика от расшифровки
ca.crt Сертификат удостоверяющего центра CA
server.crt Сертификат сервера OpenVPN
server.key Приватный ключ сервера OpenVPN, секретный
crl.pem Список отзыва сертификатов CRL
ta.key Ключ HMAC для дополнительной защиты от DoS-атак и флуда
Прежде всего мы создадим приватный ключ и файл запроса на сертификат для сервера OpenVPN, а также получим по созданному запросу в удостоверяющем центре CA подписанный сертификат. В результате у нас появятся файлы server.crt и server.key. Далее займемся остальными файлами, перечисленными в табл. 3.
Чтобы создать для сервера OpenVPN запрос на сертификат и приватный ключ, нам потребуется установить на сервер OpenVPN программу Easy-RSA, аналогично тому, как мы это делали для удостоверяющего центра CA.
Установку Easy-RSA, генерацию приватного ключа сервера OpenVPN и запроса на сертификат мы будем делать от имени пользователя vpnoperator, не имеющего привилегий администратора. Добавьте этого пользователя перед началом работ:
# adduser vpnoperator
Прежде всего, устанавливаем на сервере OpenVPN утилиту Easy-RSA и запускаем инициализацию инфраструктуры публичных ключей PKI:
$ cd /home/vpnoperator
$ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
$ unzip master.zip
$ cd /home/vpnoperator/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki
После успешной инициализации PKI в консоли появится сообщение:
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/vpnoperator/easy-rsa-master/easyrsa3/pki
Так как наш сервер OpenVPN не будет играть роль удостоверяющего центра, то после инициализации PKI мы не будем создавать CA командой build-ca.
Инфраструктура PKI будет создана в каталоге /home/vpnoperator/easy-rsa-master/easyrsa3/pki.
На следующем этапе получим запрос на сертификат и приватный ключ сервера OpenVPN:
$ ./easyrsa gen-req server
Этой командой будет создан файл запроса server.req и приватного ключа server.key. В процессе генерации у вас будет запрошен пароль, а также имя Common Name для сервера OpenVPN:
Generating a 2048 bit RSA private key
...............................................................................................................+++
....................................+++
writing new private key to '/home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key'
Enter PEM pass phrase:******
Verifying - Enter PEM pass phrase:******
-----
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) [server]: vpn-server
Keypair and certificate request completed. Your files are:
req: /home/vpnoperator/easy-rsa-master/easyrsa3/pki/reqs/server.req
key: /home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key
Первый из этих файлов нам нужно передать на сервер удостоверяющего центра CA, он не секретный. Второй файл — секретный, и он не должен покидать пределы сервера OpenVPN.
Как мы уже говорили, безопаснее всего передавать запрос на сертификат через USB флеш-диск, чтобы не подключать сервер CA к сети:
# fdisk -l
# mkdir /mnt/flash
# mount -t vfat /dev/sdb1 /mnt/flash
# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/reqs/server.req /mnt/flash/server.req
# umount /mnt/flash
Заметим, что при генерации приватного ключа был запрошен пароль. Этот пароль обеспечивает защиту, если приватный ключ будет скомпрометирован (украден злоумышленником). Пароль приватного ключа OpenVPN будет запрашиваться с консоли каждый раз при загрузке сервера и запуске OpenVPN.
Но что делать, если у вас нет доступа к консоли сервера OpenVPN или этот доступ затруднен? Такое может случиться, например, если вы создали сервер OpenVPN на базе VDS, арендованного у провайдера, не предоставляющего консольный доступ.
В этой ситуации можно создать приватный ключ без пароля с помощью опции nopass:
$ ./easyrsa gen-req server nopass
Итак, вы создали приватный ключ сервера OpenVPN и запрос на сертификат.
Смонтируйте USB флэш-диск на хосте удостоверяющего центра CA, а затем импортируйте от имени пользователя ca запрос в PKI:
# mount -t vfat /dev/sdb1 /mnt/flash
# su ca
$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa import-req /mnt/flash/server.req vpn-server
Здесь мы указали сокращенное имя запроса на сертификат как "vpn-server". Это сокращенное имя будет использовано в дальнейших операциях с сертификатом.
После удачного импорта запроса вы увидите следующее сообщение:
The request has been successfully imported with a short name of: vpn-server
You may now use this name to perform signing operations on this request.
Если ошибок нет, подписываем запрос на получение сертификата:
./easyrsa sign-req server vpn-server
В процессе создания подписанного сертификата будет запрошено подтверждение (ответьте на него "yes"), а также пароль приватного ключа удостоверяющего центра CA:
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 = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /home/ca/easy-rsa-master/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /home/ca/easy-rsa-master/easyrsa3/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:'server'
Certificate is to be certified until Jun 26 15:48:25 2024 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt
Теперь сертификат получен, и он находится на сервере удостоверяющего центра в файле home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt. Этот файл нам нужно передать на сервер OpenVPN.
Скопируйте через USB флеш-диск файл сертификата /ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt с сервера удостоверяющего центра в файл на сервере OpenVPN /home/vpnoperator/vpn-server.crt:
# cp /home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt /mnt/flash/
Затем смонтируйте USB диск на VDS OpenVPN и скопируйте файлы ca.crt сертификата CA, список отзыва сертификатов crl.pem и сертификат vpn-server.crt сервера OpenVPN в каталог /etc/openvpn:
# mount -t vfat /dev/sdb1 /mnt/flash
# cp /mnt/flash/ca.crt /etc/openvpn
# cp /mnt/flash/crl.pem /etc/openvpn
# cp /mnt/flash/vpn-server.crt /etc/openvpn
# umount /mnt/flash
Файл приватного ключа скопируйте из каталога usr/home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/ в каталог /etc/openvpn/:
# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key /etc/openvpn
Подготовка сертификата и ключа для клиента OpenVPN
Создайте запрос на сертификат и приватный ключ рабочей станции разработчика developer1:
$ ./easyrsa gen-req client nopass
Вам потребуется ввести имя Common Name для создания запроса на сертификат и приватного ключа рабочей станции:
Generating a 2048 bit RSA private key
..............................................................................................+sftp++
................................+++
writing new private key to '/home/developer1/easy-rsa-master/easyrsa3/pki/private/client.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) [client]:developer1
Keypair and certificate request completed. Your files are:
req: /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req
key: /home/developer1/easy-rsa-master/easyrsa3/pki/private/client.key
Если к защите данных предъявляются повышенные требования, создавайте приватный ключ с паролем, без использования опции nopass:
$ ./easyrsa gen-req client
В этом случае, однако, пароль приватного ключа будет запрашиваться каждый раз при загрузке хоста и запуске клиента OpenVPN.
Теперь вам потребуется перенести созданный запрос сертификата /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req на хост удостоверяющего центра CA и записать в файл /home/ca/client.req.
Сделайте это с помощью USB флэш-диска, если хост CA не подключен к сети.
Запишите запрос на USB диск:
# mkdir /mnt/flash
# mount -t vfat /dev/sdb1 /mnt/flash
# cp /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req /mnt/flash
# umount /mnt/flash
Импортируйте запрос в PKI, используя в качестве короткого имени developer1:
$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa import-req /mnt/flash/client.req developer1
Далее подпишите запрос на получение сертификата:
$ ./easyrsa sign-req client developer1
После ввода подтверждения и пароля приватного ключа CA будет создан сертификат:
/home/ca/easy-rsa-master/easyrsa3/pki/issued/developer1.crt
Запишите файл developer1.crt на USB флэш-диск, чтобы перенести его на хост клиента OpenVPN.
# cp /home/ca/easy-rsa-master/easyrsa3/pki/issued/developer1.crt /mnt/flash
# umount /mnt/flash
Скопируйте файл сертификата в каталог /etc/openvpn:
# mount -t vfat /dev/sdb1 /mnt/flash
# cp /mnt/flash/developer1.crt /etc/openvpn
Итак, теперь у нас есть файл приватного ключа рабочей станции client.key и файл сертификата developer1.crt, подписанного удостоверяющим центром CA.
Скопируйте файл ключа в каталог /etc/openvpn:
# cp /home/developer1/easy-rsa-master/easyrsa3/pki/private/client.key /etc/openvpn
Скопируйте в каталог /etc/openvpn клиента VPN следующие файлы, подготовленные на USB диске:
# cp /mnt/flash/ca.crt /etc/openvpn
# cp /mnt/flash/crl.pem /etc/openvpn
# cp /mnt/flash/ta.key /etc/openvpn
Напомним, что файлы ca.crt и crl.pem были созданы на хосте удостоверяющего центра CA, а файл ta.key — на хосте сервера OpenVPN.
На первом шаге создайте инфраструктуру публичных ключей (Public Key Infrastructure, PKI):
$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki
Вы увидите сообщение:
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/ca/easy-rsa-master/easyrsa3/pki
В результате выполнения команды init-pki был создан каталог /home/ca/easy-rsa-master/easyrsa3/pki, где и находится инфраструктура публичных ключей PKI.
На втором шаге с помощью команды build-ca создайте удостоверяющий центр CA:
$ ./easyrsa build-ca
В ответ на эту команду вам будет предложено ввести пароль и так называемое имя Common Name:
Generating a 2048 bit RSA private key
.....+++
................................................................+++
writing new private key to '/home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key'
Enter PEM pass phrase:********
Verifying - Enter PEM pass phrase:********
----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) [Easy-RSA CA]:ca.mydomain.ru>
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/ca/easy-rsa-master/easyrsa3/pki/ca.crt
Пароль будет защищать приватный ключ удостоверяющего центра, созданный в формате PEM (Privacy Enhancement for Internet Electronic Mail). Этот пароль потребуется каждый раз, когда вы будете подписывать в удостоверяющем центре сертификаты для серверов и клиентов OpenVPN.
Чтобы избавиться от необходимости ввода пароля, можно при запуске команды build-ca задать опцию nopass:
$ ./easyrsa build-ca nopass
Учтите, что злоумышленник сможет легко воспользоваться украденным ключом, созданным без пароля.
В качестве Common Name задайте, например, доменное имя, выделенное для удостоверяющего центра CA, имя пользователя или хоста сервера CA.
Для удостоверяющего центра команда build-ca создаст два файла:
/home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key
/home/ca/easy-rsa-master/easyrsa3/pki/ca.crt
Файл ca.key представляет собой приватный ключ центра CA, он секретный, и его нельзя переносить на другие узлы вашей сети.
Файл сертификата удостоверяющего центра ca.crt, напротив, открытый, и он будет нужен на узлах серверов и клиентов OpenVPN. Запишите файл ca.crt на USB флэш-диск, чтобы перенести на другие узлы.
Создание списка отзывов сертификатов
Если сотрудник уволился, необходимо заблокировать его доступ в сеть VPN компании. Специально для этой цели в OpenVPN предусмотрен список отзыва сертификатов CRL. Создайте его такой командой:
$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa gen-crl
У вас будет запрошен пароль доступа к приватному ключу ca.key удостоверяющего центра. Список отзыва сертификатов будет создан в файле /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem.
Скопируйте этот файл на USB флэш-диск:
# cp /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem /mnt/flash
Если нужно заблокировать выданный ранее сертификат, воспользуйтесь следующей командой:
$ ./easyrsa revoke developer5
Здесь мы отозвали сертификат для клиента developer5. Далее нужно скопировать новый файл CRL на сервер OpenVPN и перезапустить демон OpenVPN.
Созданные файлы и каталоги PKI
В табл. 2 мы привели краткое описание некоторых файлов и каталогов PKI, созданных в результате наших действий.
Таблица 2. Структура каталога PKI.
Файл или каталог Описание
ca.crt Сертификат удостоверяющего центра CA, не секретный
crl.pem Список отзыва сертификатов CRL
issued Каталог с сертификатами, созданными удостоверяющим центром CA, не секретный
private Каталог с секретными приватными ключами
Reqs Каталог запросов на сертификаты, не секретный
Справка по утилите Easy-RSA
Запустите утилиту Easy-RSA без параметров:
$ ./easyrsa
На экране появится список всех команд утилиты, а также полный путь к программе и к PKI.
Для того чтобы получить справку по нужной команде, добавьте опцию help. Например, так можно получить справку по команде build-ca:
$ ./easyrsa help build-ca
Генерация файла Диффи-Хелмана
Создайте ключи Диффи-Хелмана следующей командой:
$ cd /home/vpnoperator/easy-rsa-master/easyrsa3
$ ./easyrsa gen-dh
Команда gen-dh работает довольно долго. По завершении вы увидите сообщение:
DH parameters of size 2048 created at /home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem
Скопируйте файл/home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem в каталог /etc/openvpn/ :
# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/dh.pem /etc/openvpn
Подготовка сертификата и ключа для сервера OpenVPN
Помимо openssl.cnf и openvpn.conf в каталоге /etc/openvpn/ нам потребуются файлы, перечисленные в табл. 3.
Таблица 3. Файлы для сервера OpenVPN.
Файл Описание
dh.pem Файл Диффи-Хелмана для защиты трафика от расшифровки
ca.crt Сертификат удостоверяющего центра CA
server.crt Сертификат сервера OpenVPN
server.key Приватный ключ сервера OpenVPN, секретный
crl.pem Список отзыва сертификатов CRL
ta.key Ключ HMAC для дополнительной защиты от DoS-атак и флуда
Прежде всего мы создадим приватный ключ и файл запроса на сертификат для сервера OpenVPN, а также получим по созданному запросу в удостоверяющем центре CA подписанный сертификат. В результате у нас появятся файлы server.crt и server.key. Далее займемся остальными файлами, перечисленными в табл. 3.
Чтобы создать для сервера OpenVPN запрос на сертификат и приватный ключ, нам потребуется установить на сервер OpenVPN программу Easy-RSA, аналогично тому, как мы это делали для удостоверяющего центра CA.
Установку Easy-RSA, генерацию приватного ключа сервера OpenVPN и запроса на сертификат мы будем делать от имени пользователя vpnoperator, не имеющего привилегий администратора. Добавьте этого пользователя перед началом работ:
# adduser vpnoperator
Прежде всего, устанавливаем на сервере OpenVPN утилиту Easy-RSA и запускаем инициализацию инфраструктуры публичных ключей PKI:
$ cd /home/vpnoperator
$ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
$ unzip master.zip
$ cd /home/vpnoperator/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki
После успешной инициализации PKI в консоли появится сообщение:
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/vpnoperator/easy-rsa-master/easyrsa3/pki
Так как наш сервер OpenVPN не будет играть роль удостоверяющего центра, то после инициализации PKI мы не будем создавать CA командой build-ca.
Инфраструктура PKI будет создана в каталоге /home/vpnoperator/easy-rsa-master/easyrsa3/pki.
На следующем этапе получим запрос на сертификат и приватный ключ сервера OpenVPN:
$ ./easyrsa gen-req server
Этой командой будет создан файл запроса server.req и приватного ключа server.key. В процессе генерации у вас будет запрошен пароль, а также имя Common Name для сервера OpenVPN:
Generating a 2048 bit RSA private key
...............................................................................................................+++
....................................+++
writing new private key to '/home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key'
Enter PEM pass phrase:******
Verifying - Enter PEM pass phrase:******
-----
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) [server]: vpn-server
Keypair and certificate request completed. Your files are:
req: /home/vpnoperator/easy-rsa-master/easyrsa3/pki/reqs/server.req
key: /home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key
Первый из этих файлов нам нужно передать на сервер удостоверяющего центра CA, он не секретный. Второй файл — секретный, и он не должен покидать пределы сервера OpenVPN.
Как мы уже говорили, безопаснее всего передавать запрос на сертификат через USB флеш-диск, чтобы не подключать сервер CA к сети:
# fdisk -l
# mkdir /mnt/flash
# mount -t vfat /dev/sdb1 /mnt/flash
# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/reqs/server.req /mnt/flash/server.req
# umount /mnt/flash
Заметим, что при генерации приватного ключа был запрошен пароль. Этот пароль обеспечивает защиту, если приватный ключ будет скомпрометирован (украден злоумышленником). Пароль приватного ключа OpenVPN будет запрашиваться с консоли каждый раз при загрузке сервера и запуске OpenVPN.
Но что делать, если у вас нет доступа к консоли сервера OpenVPN или этот доступ затруднен? Такое может случиться, например, если вы создали сервер OpenVPN на базе VDS, арендованного у провайдера, не предоставляющего консольный доступ.
В этой ситуации можно создать приватный ключ без пароля с помощью опции nopass:
$ ./easyrsa gen-req server nopass
Итак, вы создали приватный ключ сервера OpenVPN и запрос на сертификат.
Смонтируйте USB флэш-диск на хосте удостоверяющего центра CA, а затем импортируйте от имени пользователя ca запрос в PKI:
# mount -t vfat /dev/sdb1 /mnt/flash
# su ca
$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa import-req /mnt/flash/server.req vpn-server
Здесь мы указали сокращенное имя запроса на сертификат как "vpn-server". Это сокращенное имя будет использовано в дальнейших операциях с сертификатом.
После удачного импорта запроса вы увидите следующее сообщение:
The request has been successfully imported with a short name of: vpn-server
You may now use this name to perform signing operations on this request.
Если ошибок нет, подписываем запрос на получение сертификата:
./easyrsa sign-req server vpn-server
В процессе создания подписанного сертификата будет запрошено подтверждение (ответьте на него "yes"), а также пароль приватного ключа удостоверяющего центра CA:
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 = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /home/ca/easy-rsa-master/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /home/ca/easy-rsa-master/easyrsa3/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:'server'
Certificate is to be certified until Jun 26 15:48:25 2024 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt
Теперь сертификат получен, и он находится на сервере удостоверяющего центра в файле home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt. Этот файл нам нужно передать на сервер OpenVPN.
Скопируйте через USB флеш-диск файл сертификата /ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt с сервера удостоверяющего центра в файл на сервере OpenVPN /home/vpnoperator/vpn-server.crt:
# cp /home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt /mnt/flash/
Затем смонтируйте USB диск на VDS OpenVPN и скопируйте файлы ca.crt сертификата CA, список отзыва сертификатов crl.pem и сертификат vpn-server.crt сервера OpenVPN в каталог /etc/openvpn:
# mount -t vfat /dev/sdb1 /mnt/flash
# cp /mnt/flash/ca.crt /etc/openvpn
# cp /mnt/flash/crl.pem /etc/openvpn
# cp /mnt/flash/vpn-server.crt /etc/openvpn
# umount /mnt/flash
Файл приватного ключа скопируйте из каталога usr/home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/ в каталог /etc/openvpn/:
# cp /home/vpnoperator/easy-rsa-master/easyrsa3/pki/private/server.key /etc/openvpn
Подготовка сертификата и ключа для клиента OpenVPN
Создайте запрос на сертификат и приватный ключ рабочей станции разработчика developer1:
$ ./easyrsa gen-req client nopass
Вам потребуется ввести имя Common Name для создания запроса на сертификат и приватного ключа рабочей станции:
Generating a 2048 bit RSA private key
..............................................................................................+sftp++
................................+++
writing new private key to '/home/developer1/easy-rsa-master/easyrsa3/pki/private/client.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) [client]:developer1
Keypair and certificate request completed. Your files are:
req: /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req
key: /home/developer1/easy-rsa-master/easyrsa3/pki/private/client.key
Если к защите данных предъявляются повышенные требования, создавайте приватный ключ с паролем, без использования опции nopass:
$ ./easyrsa gen-req client
В этом случае, однако, пароль приватного ключа будет запрашиваться каждый раз при загрузке хоста и запуске клиента OpenVPN.
Теперь вам потребуется перенести созданный запрос сертификата /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req на хост удостоверяющего центра CA и записать в файл /home/ca/client.req.
Сделайте это с помощью USB флэш-диска, если хост CA не подключен к сети.
Запишите запрос на USB диск:
# mkdir /mnt/flash
# mount -t vfat /dev/sdb1 /mnt/flash
# cp /home/developer1/easy-rsa-master/easyrsa3/pki/reqs/client.req /mnt/flash
# umount /mnt/flash
Импортируйте запрос в PKI, используя в качестве короткого имени developer1:
$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa import-req /mnt/flash/client.req developer1
Далее подпишите запрос на получение сертификата:
$ ./easyrsa sign-req client developer1
После ввода подтверждения и пароля приватного ключа CA будет создан сертификат:
/home/ca/easy-rsa-master/easyrsa3/pki/issued/developer1.crt
Запишите файл developer1.crt на USB флэш-диск, чтобы перенести его на хост клиента OpenVPN.
# cp /home/ca/easy-rsa-master/easyrsa3/pki/issued/developer1.crt /mnt/flash
# umount /mnt/flash
Скопируйте файл сертификата в каталог /etc/openvpn:
# mount -t vfat /dev/sdb1 /mnt/flash
# cp /mnt/flash/developer1.crt /etc/openvpn
Итак, теперь у нас есть файл приватного ключа рабочей станции client.key и файл сертификата developer1.crt, подписанного удостоверяющим центром CA.
Скопируйте файл ключа в каталог /etc/openvpn:
# cp /home/developer1/easy-rsa-master/easyrsa3/pki/private/client.key /etc/openvpn
Скопируйте в каталог /etc/openvpn клиента VPN следующие файлы, подготовленные на USB диске:
# cp /mnt/flash/ca.crt /etc/openvpn
# cp /mnt/flash/crl.pem /etc/openvpn
# cp /mnt/flash/ta.key /etc/openvpn
Напомним, что файлы ca.crt и crl.pem были созданы на хосте удостоверяющего центра CA, а файл ta.key — на хосте сервера OpenVPN.