Для запуска системы идентификации по ключам нам надо создать:
- главный сертификат открытого ключа (Certificate Authority (CA) и закрытый ключ,
- отдельные пары сертификат - закрытый ключ для сервера и каждого клиента.
Для этого мы используем скрипты easy-rsa. Устанавливаем:
root #emerge -av app-crypt/easy-rsa
Для того, чтобы не путать процесс создания PKI для openvpn с созданием для других сервисов, копируем весь набор в отдельное место:
root #cp -a /usr/share/easy-rsa /root/rsa-openvpn
Идем в этот каталог:
root #cd /root/rsa-openvpn
Перед началом, стоит прописать необходимые значения по-умолчанию. Это делается редактированием файлика vars. Минимальный набор составляют переменные:
- KEY_COUNTRY - код страны: ru, us и т.д.
- KEY_PROVINCE - область, код штата и т.д.
- KEY_CITY - город
- KEY_ORG - организация
- KEY_EMAIL - почтовый адрес.
Теперь экспортируем переменные.
root #source ./vars
Удаляем все предыдущие сертификаты.
root #./clean-all
Эта команда, к слову, удалит все созданные сертификаты.
Скрипт build-ca создаст сертификат открытого ключа и закрытый ключ.
root #./build-ca Generating a 2048 bit RSA private key .............................+++ ................+++ writing new private key to 'ca.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. ----- Country Name (2 letter code) [US]: State or Province Name (full name) [CA]: Locality Name (eg, city) [SanFrancisco]: Organization Name (eg, company) [Fort-Funston]: Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [changeme]: Name [changeme]: Email Address [mail@host.domain]:
Скрипт build-key-server # ./build-key-server <server name>
создает серверный сертификат. Убедитесь, что имя сервера (Common Name в самом скрипте) уникально. И да, не вводите пароль, когда скрипт его попросит.
root #./build-key-server example Generating a 2048 bit RSA private key .........+++ ............................................+++ writing new private key to 'example.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. ----- Country Name (2 letter code) [US]: State or Province Name (full name) [CA]: Locality Name (eg, city) [SanFrancisco]: Organization Name (eg, company) [Fort-Funston]: Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [example]: Name [changeme]: Email Address [mail@host.domain]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /root/easy-rsa-example/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'US' stateOrProvinceName :PRINTABLE:'CA' localityName :PRINTABLE:'SanFrancisco' organizationName :PRINTABLE:'Fort-Funston' organizationalUnitName:PRINTABLE:'changeme' commonName :PRINTABLE:'example' name :PRINTABLE:'changeme' emailAddress :IA5STRING:'mail@host.domain' Certificate is to be certified until Sep 4 07:29:00 2024 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
Скрипт build-dh создает файл параметров Диффи-Хеллмана .pem, который нужен для сервера. Будет лучше для каждого сервера создавать новый файл, но если очень хочется, можно использовать один на всех.
root #./build-dh Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ...........................+...........+...................... ................+ ........... ...........+.......................++*++*
Скрипт build-key # ./build-key <client name>
создает клиентский сертификат. Убедитесь, что имя клиента (Common Name в самом скрипте) уникально. И да, не вводите пароль или название компании (Company Name) когда скрипт попросит. Если вам понадобится добавить нового клиента, вам нужно проделать только этот шаг!
root #./build-key client1 Generating a 2048 bit RSA private key ...............................................................................................................................+++ ...................+++ writing new private key to 'client1.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. ----- Country Name (2 letter code) [US]: State or Province Name (full name) [CA]: Locality Name (eg, city) [SanFrancisco]: Organization Name (eg, company) [Fort-Funston]: Organizational Unit Name (eg, section) [changeme]: Common Name (eg, your name or your server's hostname) [client1]: Name [changeme]: Email Address [mail@host.domain]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /root/easy-rsa-example/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'US' stateOrProvinceName :PRINTABLE:'CA' localityName :PRINTABLE:'SanFrancisco' organizationName :PRINTABLE:'Fort-Funston' organizationalUnitName:PRINTABLE:'changeme' commonName :PRINTABLE:'client1' name :PRINTABLE:'changeme' emailAddress :IA5STRING:'mail@host.domain' Certificate is to be certified until Sep 4 07:35:43 2024 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
Generate a secret Hash-based Message Authentication Code (HMAC) by running
root #openvpn --genkey --secret keys/ta.key
Каталог /root/rsa-openvpn стоит сохранить на будущее, само собой в достаточно защищенном месте.
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии