Создание инфраструктуры открытых ключей (PKI)

Опубликовано NowhereMan -

Для запуска системы идентификации по ключам нам надо создать:

  • главный сертификат открытого ключа (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 стоит сохранить на будущее, само собой в достаточно защищенном месте.

Теги