Easy-RSA

Удобная обёртка вокруг openssl, которая позволяет генерировать как CA сертификаты, так и всякие другие, которые требуются для работы всяких приложений.

Установка

Проста и нетривиальна.

# yum install easyrsa # CentOS
# apt-get install easy-rsa # Debian
# emerge -avq easy-rsa # Gentoo

После установки весь easyrsa должен лежать в /usr/share/easy-rsa, по крайней мере в gentoo, в остальных надо смотреть более детально.

Шаг 1. Создаём корневой CA

Здесь тоже ничего сложного, для начала создаём файл с настройками для будущего CA. Переходим в директорию easy-rsa и в файл root.vars добавляем следующее:

/usr/share/easy-rsa/root.vars
set_var EASYRSA                 "$PWD"
set_var EASYRSA_OPENSSL         "openssl"
set_var EASYRSA_PKI             "$EASYRSA/root-pki"
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         "OwlHost Inc"
set_var EASYRSA_REQ_EMAIL       "ssl@owlhost.in"
set_var EASYRSA_REQ_OU          "Security Department"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE       3650
set_var EASYRSA_CERT_EXPIRE     365
set_var EASYRSA_CRL_DAYS        180

Настройки выставляем по вкусу, благо не сложно догадаться что за что отвечает. Далее начинаем создавать наш корневой сертификат. Сначала инициализируем директорию:

# ./easyrsa --vars=$PWD/root.vars init-pki

После чего создадим создаём связка CA

# ./easyrsa --vars=$PWD/root.vars build-ca

На этом пожалуй можно и остановиться.

Шаг 2. Создание дочернего CA

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

Как и в первом шаге переходим в директорию /usr/share/easy-rsa и создаём новый файл, например puppet.vars со следующим содержанием:

/usr/share/easy-rsa/puppet.vars
set_var EASYRSA "$PWD"
set_var EASYRSA_OPENSSL         "openssl"
set_var EASYRSA_PKI             "$EASYRSA/puppet-pki"
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         "OwlHost Inc"
set_var EASYRSA_REQ_EMAIL       "ssl@owlhost.in"
set_var EASYRSA_REQ_OU          "IT Department"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE       3650
set_var EASYRSA_CERT_EXPIRE     365
set_var EASYRSA_CRL_DAYS        180

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

# ./easyrsa --vars=puppet.vars init-pki

Однако в отличии от корневого CA для дочернего мы будем делать запрос, которй потом надо будет подписать корневым (для этого указываем агрументом subca)

# ./easyrsa --vars=puppet.vars build-ca subca

На выходе данного скрипта получим в директории puppet-pki/reqs/ca.req, который надо будет скопировать в root-pki/reqs/puppet.req, после чего производим подписывание нашего дочернего сертификата корневым:

# ./easyrsa --vars=root.vars sign-req ca puppet

После ввода пароля и улаживания всех формальностей в root-pki/issued появится наш puppet.crt, который надо скопировать в puppet-pki/ca.crt.

Шаг 3. Выписывание сертификатов для серверов

Здесь тоже всё достаточно просто. Еогда у нас уже есть CA (или subCA, не особо важно), мы просто генерируем запрос сертификата, а потом подисываем его. Выглядит это действо в две команды:

# ./easyrsa --vars=puppet.vars gen-req puppet.scm.owlhost.in
# ./easyrsa --vars=puppet.vars sign-req server puppet.scm.owlhost.in

На выходе получаем два файла, которые нам понадобятся puppet-pki/issued/puppet.scm.owlhost.in.crt и puppet-pki/private/puppet.scm.owlhost.in.key, которые являются сертификатом и ключём к нему соответственно.