Инфраструктура открытых ключей на базе EasyRSA

20.06.2020

Теги: LinuxUbuntuVPNКлючНастройкаСервер

В основе инфраструктуры открытых ключей лежит криптографическая система с открытым ключом (например, RSA). Это означает, что каждому устройству (серверу, компьютеру) выдается ключ, который служит идентификатором. Ключ состоит из открытой и секретной частей: открытую часть (сертификат) можно раскрывать участникам обмена, а секретную часть (ключ) владелец должен держать в секрете.

Например, для доступа к VPN сотрудник использует именно сертификат, а не имя пользователя и пароль. При установлении соединения сервер и клиент проверяют подлинность сертификатов друг друга; если проверки завершены успешно — коммуникация продолжается. Проверка подлинности включает в себя три этапа:

  • сертификат должен быть подписан удостоверяющим центром
  • срок действия сертификата еще не истек к этому моменту
  • сертификат не должен содержаться в специальном отзывном листе

Инфраструктура открытых ключей состоит из удостоверяющего центра и удостоверенных им сущностей. Ключевая особенность инфраструктуры — безусловное доверие к удостоверяющему центру и отсутствие доверия удостоверенных сущностей друг к другу.

Практический пример

Допустим, мы выступаем в роли системного администратора компании «One Company». У компании есть домен one-company.com, сервер удостоверяющего центра имеет имя ca.one-company.com, на сервере установлена Ubuntu 18.04 LTS. Итак, подключаемся к серверу:

$ ssh support@ca.one-company.com

1. Загружаем последнюю версию EasyRSA

Загружаем последнюю версию EasyRSA (которую используем для создания инфраструктуры открытых ключей) из официального репозитория проекта на GitHub:

$ wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
$ tar xvf EasyRSA-3.0.7.tgz
$ rm EasyRSA-3.0.7.tgz
$ mv EasyRSA-3.0.7/ easyrsa/
$ cd easyrsa/

2. Редактируем файл конфигурации EasyRSA

Создаем копию файла vars.example — это пример конфигурации:

$ cp vars.example vars

Здесь нас интересуют следующие настройки, которые мы будем изменять:

# Define X509 DN mode.
# This is used to adjust what elements are included in the Subject field as the DN
# (this is the "Distinguished Name.")
# Note that in cn_only mode the Organizational fields further below aren't used.
#
# Choices are:
#   cn_only  - use just a CN value
#   org      - use the "traditional" Country/Province/City/Org/OU/email/CN format
set_var EASYRSA_DN "org"

Свежие версии по умолчанию используют упрощенный формат cn_only (common name only), требующий ввода только универсального имени. При использовании «классического» значения org (organization), помимо универсального имени, потребуется указать дополнительные атрибуты.

# Organizational fields (used with 'org' mode and ignored in 'cn_only' mode.)
# These are the default values for fields which will be placed in the
# certificate.  Don't leave any of these fields blank, although interactively
# you may omit any specific field by typing the "." symbol (not valid for
# email.)
set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "Moscow"
set_var EASYRSA_REQ_CITY "Moscow"
set_var EASYRSA_REQ_ORG "One Company"
set_var EASYRSA_REQ_EMAIL "support@one-company.com"
set_var EASYRSA_REQ_OU "IT department"

Поскольку мы выбрали org, указываем дополнительные атрибуты: страну, регион, город, название организации, подразделение, а также адрес электронной почты.

# Choose a size in bits for your keypairs. The recommended value is 2048.  Using
# 2048-bit keys is considered more than sufficient for many years into the
# future. Larger keysizes will slow down TLS negotiation and make key/DH param
# generation take much longer. Values up to 4096 should be accepted by most
# software. Only used when the crypto alg is rsa (see below.)
set_var EASYRSA_KEY_SIZE 2048

Параметр EASYRSA_KEY_SIZE определяет размер генерируемых ключей. Мы задаем значение 2048 бит, чего в большинстве случаев достаточно.

# In how many days should the root CA key expire?
set_var EASYRSA_CA_EXPIRE 3650

# In how many days should certificates expire?
set_var EASYRSA_CERT_EXPIRE 825

Параметр EASYRSA_CA_EXPIRE устанавливает срок действия ключа удостоверяющего центра (3650 дней), EASYRSA_CERT_EXPIRE — для остальных выпускаемых сертификатов (825 дней).

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

В каталоге easyrsa имеется скрипт easyrsa, который предназначен для выполнения разнообразных задач, связанных с построением центра сертификации. Запускаем этот скрипт с опцией init-pki для инициализации инфраструктуры:

$ ./easyrsa init-pki
Note: using Easy-RSA configuration from: /home/support/easyrsa/vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/support/easyrsa/pki

Создаем корневой сертификат удостоверяющего центра:

$ ./easyrsa build-ca nopass
Note: using Easy-RSA configuration from: /home/support/easyrsa/vars
Using SSL: openssl OpenSSL 1.1.1  11 Sep 2018
Generating RSA private key, 2048 bit long modulus (2 primes)
..........+++++
.......+++++
e is 65537 (0x010001)
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) [RU]: Enter
State or Province Name (full name) [Moscow]: Enter
Locality Name (eg, city) [Moscow]: Enter
Organization Name (eg, company) [One Company]: Enter
Organizational Unit Name (eg, section) [IT department]: Enter
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: One Company Auth Center
Email Address [support@one-company.com]: Enter

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/support/easyrsa/pki/ca.crt

Нужно указать семь значений для нового сертификата; для шести из них будет предложено значение по умолчанию. Остается придумать универсальное имя — пусть это будет One Company Auth Center. Корневой сертификат — это файл pki/ca.crt, а секретный ключ — это файл pki/private/ca.key.

Чтобы не вводить вводить пароль при каждом взаимодействии с центром сертификации, мы запустили команду с необязательной опцией nopass.

4. Запрос на выдачу сертификата

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

  • заявитель составляет и отправляет запрос в центр сертификации по безопасному каналу
  • удостоверяющий центр подписывает запрос, выпускает сертификат и возвращает его заявителю

После этого удостоверяющий центр знает о новом заявителе. А тот, в свою очередь, имеет удостоверенный сертификат и секретный ключ для его дальнейшего использования.

Предположим, что у компании «One Company» есть подрядчик — компания «Two Company», сотрудники которой должны получить доступ в сеть «One Company». Системному администратору «Two Company» предстоит выполнить уже известные шаги:

  • настоить выделенный сервер
  • скачать последнюю версию EasyRSA
  • отредактировать конфигурационный файл
  • инициализировать инфраструктуру
  • сгенерировать корневой сертификат
  • создать запрос на получение сертификата

Универсальное имя удостоверяющего центра — Two Company Auth Center. Параметры конфигурации «Two Company» выглядят следующим образом:

set_var EASYRSA_DN "org"

set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "Moscow"
set_var EASYRSA_REQ_CITY "Moscow"
set_var EASYRSA_REQ_ORG "Two Company"
set_var EASYRSA_REQ_EMAIL "support@two-company.com"
set_var EASYRSA_REQ_OU "IT department"

set_var EASYRSA_KEY_SIZE 2048

set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 825
$ ./easyrsa init-pki
$ ./easyrsa build-ca nopass

Первым сотрудником «Two Company», который получит доступ к инфраструктуре «One Company», станет Сергей Иванов. Обратите внимание, что некоторые атрибуты (отдел, электронная почта) сертификата могут быть указаны вручную и отличаться от значений по умолчанию.

$ ./easyrsa gen-req sergey-ivanov nopass
Note: using Easy-RSA configuration from: /home/support/easyrsa/vars
Using SSL: openssl OpenSSL 1.1.1  11 Sep 2018
Generating a RSA private key
........................................................................................+++++
...............................................................................................+++++
writing new private key to '/home/support/easyrsa/pki/easy-rsa-1772.pEJHSW/tmp.eKqgr7'
-----
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) [RU]: Enter
State or Province Name (full name) [Moscow]: Enter
Locality Name (eg, city) [Moscow]: Enter
Organization Name (eg, company) [Two Company]: Enter
Organizational Unit Name (eg, section) [IT department]: Marketing department
Common Name (eg: your user, host, or server name) [sergey-ivanov]: Sergey Ivanov
Email Address [support@two-company.com]: ivanov.sergey@two-company.com

Keypair and certificate request completed. Your files are:
req: /home/suport/easyrsa/pki/reqs/sergey-ivanov.req
key: /home/support/easyrsa/pki/private/sergey-ivanov.key

После этого системный администратор «Two Company» передает файл sergey-ivanov.req системному администратору «One Company».

5. Выпуск и подпись сертификата

Системный администратор «One Company» принял файл запроса. Прежде всего, он должен загрузить его на сервер удостоверяющего центра:

$ scp sergey-ivanov.req support@ca.one-company.com:/tmp/sergey-ivanov.req

После выполнить на сервере удостоверяющего центра процедуру импорта и подписания:

$ ./easyrsa import-req /tmp/sergey-ivanov.req sergey-ivanov
Note: using Easy-RSA configuration from: /home/support/easyrsa/vars
Using SSL: openssl OpenSSL 1.1.1  11 Sep 2018

The request has been successfully imported with a short name of: sergey-ivanov
You may now use this name to perform signing operations on this request.
$ ./easyrsa sign-req client sergey-ivanov
Note: using Easy-RSA configuration from: /home/support/easyrsa/vars
Using SSL: openssl OpenSSL 1.1.1  11 Sep 2018

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 client certificate for 825 days:

subject=
    countryName               = RU
    stateOrProvinceName       = Moscow
    localityName              = Moscow
    organizationName          = Two Company
    organizationalUnitName    = Marketing department
    commonName                = Sergey Ivanov
    emailAddress              = ivanov.sergey@two-company.com

Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from /home/support/easyrsa/pki/easy-rsa-3922.TlvmMY/tmp.9sCyLW
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'RU'
stateOrProvinceName   :ASN.1 12:'Moscow'
localityName          :ASN.1 12:'Moscow'
organizationName      :ASN.1 12:'Two Company'
organizationalUnitName:ASN.1 12:'Marketing department'
commonName            :ASN.1 12:'Sergey Ivanov'
emailAddress          :IA5STRING:'ivanov.sergey@two-company.com'
Certificate is to be certified until Sep 23 12:01:07 2022 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /home/support/easyrsa/pki/issued/sergey-ivanov.crt

Запрос удовлетворен, был сгенерирован файл сертификата sergey-ivanov.crt. Системный администратор «One Company» передает его коллеге из «Two Company», тот настраивает VPN-подключение на рабочем компьютере Иванова.

Поиск: Linux • Ubuntu • Ключ • Настройка • Сервер • EasyRSA • Сертификат • VPN

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.