Удобная обёртка вокруг openssl, которая позволяет генерировать как CA сертификаты, так и всякие другие, которые требуются для работы всяких приложений.
Проста и нетривиальна.
# yum install easyrsa # CentOS # apt-get install easy-rsa # Debian # emerge -avq easy-rsa # Gentoo
После установки весь easyrsa должен лежать в /usr/share/easy-rsa, по крайней мере в gentoo, в остальных надо смотреть более детально.
Здесь тоже ничего сложного, для начала создаём файл с настройками для будущего CA. Переходим в директорию 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
На этом пожалуй можно и остановиться.
Как известно держать все яйца в одной корзине идея не очень хорошая, поэтому мы создатим для, например, puppet, отдельный корневой сертификат и все клиентские машины будем подписывать им.
Как и в первом шаге переходим в директорию /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.
Здесь тоже всё достаточно просто. Еогда у нас уже есть 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, которые являются сертификатом и ключём к нему соответственно.