Инфраструктура открытых ключей на базе EasyRSA
В основе инфраструктуры открытых ключей лежит криптографическая система с открытым ключом (например, 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-подключение на рабочем компьютере Иванова.
- Установка WireGuard на Ubuntu 20.04 LTS. Часть вторая из двух
- Установка WireGuard на Ubuntu 20.04 LTS. Часть первая из двух
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 12 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 11 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 10 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 9 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 8 из 12
Поиск: Linux • Ubuntu • Ключ • Настройка • Сервер • EasyRSA • Сертификат • VPN