Утилита Easy-RSA изначально была создана в рамках проекта OpenVPN для упрощения управления ключами и сертификатами Инфраструктуры открытого ключа, использующимися для защиты передаваемой по сети информации, что, несомненно, позволяет сократить временные затраты на освоение развёртывания и сопровождения службы OpenVPN.

1. Введение в Инфраструктуру открытого ключа
2. Easy-RSA 3

Введение в Инфраструктуру открытого ключа

Используемая терминология

  • ИОК / PKI (Public Key Infrastructure) — инфраструктура открытого ключа описывает файлы и связи между CA, ключ-парами, заявками и сертификатами;

  • Сообщение / Message — любая цифровая информация, передаваемая между пользователями ИОК не только по сети, но и иными способами, включая файлы, электронные письма или финансовые транзакции;

  • Дайджест сообщения / Message Digest (также известный как “hash-value” или “fingerprint”) — результат работы необратимой криптографической хэш-функции от сообщения, представляющий собой небольшой блок данных фиксированной длины (длина зависит от используемого алгоритма), являющийся условно уникальным отпечатком исходного сообщения, то есть, позволяющий идентифицировать исходное сообщение в односторонней корреляции с высокой коллизионной стойкостью и стойкостью к подбору прообраза;

  • Асимметричные шифры — семейство алгоритмов шифрования с использованием ключ-пары, в которых для шифрования используется один из ключей, а для расшифровки другой из той же ключ-пары;

  • Ключ-пара / keypair — пара математически связанных ключей асимметричного алгоритма шифрования, условно разделённых в ИОК на «открытый ключ» (публичный, широко известный) и «закрытый ключ» (приватный, секретный, известный лишь владельцу), каждый из которых равноправен и может использоваться как для шифрования, так и для расшифровки данных, зашифрованных другим ключом из ключ-пары;

  • CA (Certificate Authority) — дословно переводится как «Сертификатный авторитет» (более подходящее название, чем «Центр сертификации», принятое в отечественной специальной литературе) и означает главный (корневой) сертификат инфраструктуры открытого ключа;

  • ЭЦП (электронно-цифровая подпись) — дайджест сообщения, зашифрованный алгоритмом асимметричного шифрования с помощью закрытого ключа подписанта и предназначенный для сопровождения подписанного сообщения с последующим установлением его подлинности на стороне получателя путём сравнения вычисленного на стороне получателя с помощью криптографической хэш-функции дайджеста полученного сообщения с дайджестом, расшифрованным из ЭЦП с помощью доступного получателю открытого ключа подписанта;

  • ЗПС / CSR (Certificate Signing Request или Certification Request) — передающаяся на подпись в CA заявка на подписание сертификата, самостоятельно подписанная ЭЦП заявителя и содержащая информацию о сертификате, в которую, помимо открытого ключа из самостоятельно сформированной заявителем ключ-пары, как правило, включены данные о заявителе, перечень полномочий сертификата и срок действия;

  • Сертификат / cert (certificate) — ЗПС, подписанная ЭЦП с помощью закрытого ключа полномочного сертификата (например, с помощью закрытого ключа сертификата CA);

  • Цепочка доверия / Chain of trust — последовательность сертификатов, каждый из которых удостоверен ЭЦП, сформированной с помощью закрытого ключа предыдущего сертификата в цепочке доверия, вплоть до доверенного сертификата CA.

Ввиду того, что в основе инфраструктуры открытых ключей лежит принцип доверия всех пользователей корневому сертификату CA (он же «Центр сертификации»), с помощью закрытого ключа которого формируются ЭЦП для подписи ЗПС, тем самым превращая ЗПС в первые сертификаты в цепочках доверия, закрытый ключ CA крайне чувствителен к обеспечению безопасности хранения и использования. Компрометация закрытого ключа CA влечёт отзыв доверия не только к самому сертификату CA, но также ко всем сертификатам во всех цепочках доверия этого CA.

Ключ-пары и заявки на подписание сертификатов (ЗПС)

Для формирования ключ-пары и подготовки заявок на подписание сертификата заявителю не требуется сертификат CA и/или его открытый ключ. Заявителю не требуется сертификат с открытым ключом CA до тех пор, пока не понадобится удостоверить подлинность какого-либо сообщения, полученного от CA или другого пользователя ИОК, чей сертификат принадлежит какой-либо цепочке доверия, идущей от сертификата CA. Таким сообщением может быть ЗПС заявителя, подписанная ЭЦП с помощью закрытого ключа CA, что превращает ЗПС в сертификат, действительный для всех пользователей ИОК, что доверяют одному и тому же CA.

Закрытый ключ из сформированной заявителем при создании ЗПС ключ-пары никогда, никуда, ни в коем случае не передаётся (если законами государственной юрисдикции не оговорено иное) и используется лишь в системе заявителя для удостоверения подлинности отправляемых заявителем сообщений, а также для расшифровки полученных заявителем от других пользователей ИОК сообщений, зашифрованных открытым ключом заявителя.

Проверка выданного сертификата

После того как два пользователя ИОК создали свои ключ-пары, отправили ЗПС с открытыми ключами в CA, получили подписанные ЭЦП с помощью закрытого ключа CA копии своих ЗПС — сертификаты, а также сертификат CA, который должен быть доставлен способом, гарантирующим его подлинность, эти пользователи могут пройти взаимную аутентификацию.

Во время TLS-рукопожатия, каждая из сторон соединения предоставляет другой стороне цепочку доверия своего сертификата. Стороны, с помощью проверок ЭЦП сертификатов, проверяют подлинность всех полученных от другой стороны сертификатов в цепочке доверия, вплоть до сертификата CA, который у обеих сторон должен совпасть.

Стороны подтверждают, что являются теми, чьи цепочки доверия они предоставили, подписывая пересылаемые сообщения своими закрытыми ключами, парой к которым являются открытые ключи в ранее предоставленных сторонами друг другу сертификатах, с помощью которых сторона-получатель может удостоверить ЭЦП полученного сообщения.

Easy-RSA 3

Краткий обзор Easy-RSA

Easy-RSA, это консольная утилита управления ИОК в соответствии со стандартом ITU-T X.509. Как ранее уже упоминалось, для аутентификации обменивающихся информацией сторон и проверки подлинности отправляемых ими сообщений, в основе ИОК лежит принцип доверия всех пользователей корневому сертификату CA.

В своей реализации утилита использует вызовы подсистемы стандарта POSIX, что позволяет применять её на большинстве современных систем, реализующих этот стандарт. Официальная версия для операционной системы Windows также включает программы, необходимые для использования Easy-RSA. Разработчики утилиты постарались ограничить количество внешних зависимостей от других программ. Для задач, связанных с криптографией, в качестве функционального бэкенда используется библиотека OpenSSL.

Основные характеристики

Список некоторых, наиболее заметных возможностей утилиты Easy-RSA:

  • Easy-RSA может работать с несколькими CA, каждый из которых имеет собственную независимую конфигурацию, каталог хранения и систему обработки расширений X.509;

  • Поддержка создания многодоменного сертификата, позволяющая создавать сертификат для нескольких доменных имён;

  • Единый бэкенд используется на всех поддерживаемых платформах, что гарантирует наличие одинакового набора всех необходимых функций. Поддерживаются все Windows и Unix-подобные системы (BSD, Linux и т. д.);

  • Интерактивный и автоматизированный (пакетный) режимы работы;

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

  • Встроенные настройки по умолчанию позволяют использовать Easy-RSA без первичного редактирования конфигурационного файла;

Получение и использование Easy-RSA

Основная программа утилиты Easy-RSA представляет собой скрипт командной оболочки “Bourne shell” (шебанг: #!/bin/sh), поддерживающий пару конфигурационных файлов, ввиду чего, формальная установка и компиляция не требуются, а для подготовки к использованию Easy-RSA достаточно скачать сжатый пакет (файл с расширением .tar.gz для Linux/Unix или .zip для Windows) и извлечь его содержимое в выбранный вами каталог. Также утилита Easy-RSA не требует прав суперпользователя — не требует запуска с правами “root” (на Linux/Unix) или с правами “Administrator” на Windows.

Выполнение Easy-RSA

Под Windows, для запуска командной оболочки Bourne shell в среде POSIX, подходящей для использования утилиты Easy-RSA, используется скрипт EasyRSA-Start.bat командной оболочки cmd-shell.

Основной формат для запуска команд:
./easyrsa command [ cmd-opts ]

где command — имя команды для выполнения, а cmd-opts — любые параметры команды, которые должны быть переданы. У каждой команды могут быть как обязательные, так и необязательные параметры. Обратите внимание на обязательный начальный компонент ./, указывающий на текущий каталог. Данное требование в Unix-подобных средах может быть в новинку для пользователей Windows.

Общие сведения об использовании и справка по командам:
./easyrsa help [ command ]

При запуске скрипта без command, отображается общая информация и список доступных команд, а при указании команды отображается подро��ная справка по команде.

Настройка Easy-RSA

В отличие от предыдущих версий, для начала работы утилите Easy-RSA больше не требуется наличие конфигурационного файла. Тем не менее файл vars.example содержит множество закомментированных параметров, которые можно использовать для настройки поведения утилиты, отличного от поведения по умолчанию. Ознакомившись с этим файлом вы получите представление об основных настраиваемых возможностях утилиты. Имейте в виду, что для настройки утилиты, необходимые параметры должны помещаться в файл vars (без расширения).

Кроме того, некоторые параметры для изменения поведения утилиты можно задавать непосредственно в качестве аргументов утилиты при запуске из командной строки. Полный список этих параметров доступен при выполнении:
./easyrsa help options

Дополнительно для специалистов доступна гибкая настройка с помощью переменных окружения и пользовательских расширений X.509. Подробнее смотрите раздел документации Easy-RSA Advanced Reference.

Основы начала работы

Употребляемые далее термины доступны тем, кто уже знаком с инфраструктурой открытого ключа. Тем, кто не знаком с ИОК и пролистал первый раздел «Введение в Инфраструктуру открытого ключа», рекомендуется с ним ознакомиться.

Создание инфраструктуры открытого ключа в Easy-RSA

Перед тем, как начать работать с ключами и сертификатами ИОК, придётся создать каталог со структурой файлов и каталогов, поддерживающей работу утилиты Easy-RSA с ИОК.

Специалисты по сопровождению пакетов некоторых дистрибутивов Linux поставляют в пакете easy-rsa файл /usr/bin/make-cadir, и если вам повезло, то данный пакетный файл (скрипт) командной оболочки Burn shell для автоматизации создания каталога с заданным именем, необходимыми правами, символическими ссылками на каталог /usr/share/easy-rsa/x509-types/ и утилиту /usr/share/easy-rsa/easyrsa (чтобы утилиту можно было запускать из созданного каталога лишь указав имя символьной ссылки ./easyrsa), упростит вам создание такого каталога. В противном случае, вы можете самостоятельно создать файл make-cadir по приведённому ниже исходному коду в любом удобном для вас месте, не забыв, при этом, дать себе права на запуск этого пакетного файла и прописать к нему путь в переменной окружения PATH, чтобы запускать из любого места без указания полного пути.

#!/bin/sh

# This script creates a new directory in order to be used
# with the tools from the easy-rsa project.
#
# Copyright (C) 2012 Alberto Gonzalez Iniesta
#               2018 Pierre-Elliott Bécue
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.

set -e

usage() {
  echo "Usage: $0 DIRECTORY"
  echo "Creates a *new* directory and prepares it to be used as a (CA) key management directory (to create and store keys and certificates)."
  exit 1
}

[ "$#" -ne 1 ] && usage
[ -e "$1" ] && { echo "$1 exists. Aborting." ; usage ; }

mkdir -m 700 -p "$1"
ln -s /usr/share/easy-rsa/easyrsa "$1"
ln -s /usr/share/easy-rsa/x509-types "$1"
cp /usr/share/easy-rsa/openssl-easyrsa.cnf "$1"
cp /usr/share/easy-rsa/vars.example "$1/vars"

Для создания и инициализации или очистки (переинициализации) структуры файлов и каталогов, поддерживающей работу с ИОК, используется команда:
./easyrsa init-pki

После создания и инициализации такого каталога можно приступать к созданию CA, ключ-пар и ЗПС.

Структура каталога ИОК

Структура каталога с поддержкой ИОК утилитой Easy-RSA следующая:

  • pki/private/ — каталог с закрытыми ключами;

  • pki/reqs/ — каталог с локально сформированными ЗПС;

    В чистой структуре каталогов поддержки ИОК не будет никаких файлов, лишь пустые каталоги. Представленные ниже команды позволят вам создать в этих каталогах необходимые файлы в зависимости от выполняемой операции.

При выполнении утилиты Easy-RSA для создания CA, опосредованно выполняется утилита openssl и создаются такие важные файлы и каталоги, как:

  • pki/ca.crt — сертификат CA;

  • pki/index.txt — основная база данных всех выданных сертификатов;

  • pki/serial — хранит следующий серийный номер (инкрементальный);

  • pki/private/ca.key — закрытый ключ CA (критически важный для безопасности ИОК);

  • pki/serts_by_serial/ — каталог всех подписанных CA сертификатов, упорядоченных по серийным номерам;

  • pki/issued/ — каталог всех выданных сертификатов по общему имени (Common Name, CN);

После создания структуры каталога поддержки ИОК можно приступать к формированию ключ-пары и сертификата CA.

Использование Easy-RSA для CA

Создание CA

Для выпуска сертификата посредством подписания ЗПС вам понадобиться CA. Для создания CA в подготовленной вами структуре каталогов поддержки ИОК запустите на выполнение:
./easyrsa build-ca

Удостоверьтесь, что для защиты закрытого ключа CA вы используете достаточно надёжный пароль, который вам предстоит вводить каждый раз при подписании ЗПС с помощью закрытого ключа CA, выпуская сертификат.

При создании сертификата CA вам предстоит выбрать для него общее имя (Common Name, CA), которое может быть любым.

Импорт ЗПС на подпись CA

Как только сертификат CA создан, ИОК можно использовать для импорта ЗПС от внешних систем, которые запрашивают выпуск сертификата у данного CA. Перед подписанием такой ЗПС её необходимо импортировать в структуру поддержки ИОК, чтобы утилита Easy-RSA знала о ней. Файл заявки (ЗПС) должен иметь формат, соответствующий стандарту PKCS#10.
Независимо от имени импортируемого файла ЗПС, Easy-RSA использует для ссылки на эту заявку краткое наименование, определённое в момент импорта. Импорт осуществляется следующим образом:
./easyrsa import-req /path/to/request.req nameOfRequest

где nameOfRequest — краткое наименование, в котором, как правило, указывается имя системы или пользователя, формирующего ЗПС.

Подписание заявки

После того как ЗПС была импортирована в ИОК, её можно проверить и подписать. Каждому сертификату необходим тип расширения X.509. Easy-RSA по умолчанию поддерживает три таких типа:

  • client — TLS-клиент, подходящий для пользователя VPN и веб-браузера (веб-клиент);

  • server — TLS-сервер, подходящий для VPN-сервера или веб-сервера;

  • ca — CA, соединяющий цепочки доверия сертификатов TLS-клиента и TLS-сервера;

При необходимости, по месту могут быть определены дополнительные типы расширений X.509 (см. в Easy-RSA Advanced Reference).

Отзыв сертификатов и публикация списка отзыва сертификатов (CRL)

Если сертификат необходимо отозвать, это можно сделать следующим образом:
./easyrsa revoke nameOfRequest

Чтобы создать список отзыва сертификатов для систем, которые его используют, выполните следующую команду:
./easyrsa gen-crl

Обратите внимание, что сформированное сообщение (список отзыва сертификатов) необходимо опубликовать или отправить в системы, которые полагаются на обновление данного списка, поскольку до получения такого обновления по-прежнему считают все используемые системой сертификаты действительными.

Использование Easy-RSA для формирования ключ-пары и ЗПС

Easy-RSA может формировать ключ-пару и ЗПС в формате PKCS#10. Такая заявка (ЗПС) необходима CA для создания и возврата подписанного сертификата. В идеале, формирование ключ-пары и ЗПС должно происходить на той системе, где будет использоваться закрытый ключ.

Формирование ключ-пары и заявки на подписание сертификата осуществляется командой:
./easyrsa gen-req nameOfRequest

После чего вам будет предложено изменить имя субъекта в заявке. По умолчанию Easy-RSA использует указанное в командной строке краткое наименование, которое при необходимости может быть изменено, а закрытый ключ будет предложено защитить паролем. После завершения операции утилита выведет имена файлов сформированного закрытого ключа и ЗПС.

Для получения подписанного сертификата, необходимо отправить ЗПС на подпись CA, что не требуется, в случае, если формирование ключ-пары и ЗПС происходило в том же каталоге ИОК, что и CA, поскольку сформированная заявка уже «импортирована».

Используемые материалы: