Product SiteDocumentation Site

Глава 3. Установка сервера FreeIPA в режиме CA-less

3.1. Подготовка сертификатов для сервера FreeIPA
3.2. Экспорт сертификатов в правильные форматы
3.3. Установка FreeIPA в режиме CA-less
В этом разделе описывается установка сервера FreeIPA без встроенного центра сертификации (CA-less).
Конфигурация без CA требуется в тех случаях, когда по какой-либо причине нет возможности развернуть на FreeIPA встроенный PKI-сервис Dogtag.
Для установки в режиме CA-less необходимо предоставить следующие сертификаты:
  • сертификат и приватный ключ сервера Directory Server:
    • --dirsrv-cert-file — путь к одному или нескольким файлам, содержащим:
      • сертификат сервера Directory Server;
      • опционально — часть или полную цепочку сертификатов CA;
      • приватный ключ (если используется формат PKCS#12 или PKCS#8);
    • --dirsrv-pin — пароль для доступа к приватному ключу (требуется только для PKCS#12);
  • сертификат и приватный ключ веб-сервера Apache:
    • --http-cert-file —путь к одному или нескольким файлам, содержащим:
      • сертификат сервера Apache;
      • опционально — часть или полную цепочку сертификатов CA;
      • приватный ключ (если используется формат PKCS#12 или PKCS#8);
    • --http-pin — пароль для доступа к приватному ключу (требуется только для PKCS#12);
  • Сертификат центра сертификации (CA):
    • --ca-cert-file — путь к одному или нескольким файлам в формате PEM, содержащим сертификат(ы) CA, выдавшего сертификаты для:
      • сервера Directory Server;
      • веб-сервера Apache;
      • (опционально) Kerberos KDC (если используется PKINIT).

      Примечание

      Этот параметр необязателен, если полная цепочка CA уже включена в файлы, указанные через --dirsrv-cert-file и --http-cert-file.
      Однако в большинстве случаев корневой сертификат CA не входит в PKCS#12-архив серверного сертификата, поэтому его необходимо передать отдельно через --ca-cert-file.
  • сертификат и приватный ключ для PKINIT (опционально):
    • --pkinit-cert-file — путь к файлу сертификата;
    • --pkinit-pin — пароль для доступа к приватному ключу;;
    • --no-pkinit — отключает настройку PKINIT. Если сертификат PKINIT не предоставлен, FreeIPA настроит KDC без поддержки PKINIT.
Параметры --dirsrv-cert-file и --http-cert-file можно указывать несколько раз, чтобы передать отдельные файлы (например, сертификат, ключ и промежуточный CA).
Комбинация файлов, переданных через --dirsrv-cert-file, --http-cert-file и --ca-cert-file, должна содержать полную цепочку сертификатов от серверного сертификата до корневого CA, включительно. Без этого установка завершится ошибкой.

3.1. Подготовка сертификатов для сервера FreeIPA

Предупреждение

Перед генерацией сертификатов необходимо убедиться, что следующая команда возвращает полное доменное имя (FQDN) сервера FreeIPA:
# echo $HOSTNAME
ipa.example.test
Создать каталог для сертификатов:
# mkdir ~/test_ca
Создать файл password.txt с паролем к закрытому ключу (длина пароля должна быть не меньше 8 символов):
# echo "SECret.123" > ~/test_ca/password.txt
Инициализировать базу данных NSS:
# certutil -d ~/test_ca -N -f ~/test_ca/password.txt
Создать файл с энтропией:
# head -c20 /dev/random > ~/test_ca/noise.txt
Выполнить экспорт переменной CERT_SERIAL:
# export CERT_SERIAL=1
Создать корневой сертификат CA:
# SKID="0x`openssl rand -hex 20`"
# echo $SKID
0xfa012b30b9407b0750b786ff5ed9f49ce3998622
# certutil -d ~/test_ca -S -n "CA" -s "CN=Certificate Authority" -x -t CT,,C -1 -2 -5 -m $CERT_SERIAL -v 120 -z ~/test_ca/noise.txt -f ~/test_ca/password.txt --extSKID
В ответ на запросы команды дать следующие ответы (на запрос «Enter value for the key identifier fields», следует ввести вывод команды echo $SKID):
  0 - Digital Signature
  1 - Non-repudiation
  5 - Cert signing key
  9 - done
  Is this a critical extension [y/N]? y
  Is this a CA certificate [y/N]?  y
  Enter the path length constraint, enter to skip [<0 for unlimited path] 0
  Is this a critical extension [y/N]? y
  Enter value for the key identifier fields,enter to omit: 0xfa012b30b9407b0750b786ff5ed9f49ce3998622
  Is this a critical extension [y/N]? n
  5 - SSL CA
  6 - S/MIME CA
  7 - Object Signing CA
  9 - done
  Is this a critical extension [y/N]? n
Создать noise файл, заполненный случайными числами:
# head -c20 /dev/random > ~/test_ca/noise.txt
Создать запрос на сертификат (на запрос «Enter value for the key identifier fields», следует ввести вывод команды echo $SKID):
# SKID="0x`openssl rand -hex 20`"
# echo $SKID
0xb17caf72b46288bcc9c887c89894dc917e06f724
# certutil -d ~/test_ca -R -s CN=$HOSTNAME,O=IPA -o /tmp/servercert.req -k rsa -g 2048 -z ~/test_ca/noise.txt -f ~/test_ca/password.txt -a --extSKID --extSAN dns:ipa.example.test
Generating key.  This may take a few moments...

Adding Subject Key ID extension.
Enter value for the key identifier fields,enter to omit:
0xb17caf72b46288bcc9c887c89894dc917e06f724
Is this a critical extension [y/N]?
n
Подписать запрос на сертификат:
# export CERT_SERIAL=$(($CERT_SERIAL + 1))
# certutil -d ~/test_ca -C -c "CA" -i /tmp/servercert.req -o /tmp/servercert.pem -m $CERT_SERIAL -v 120 -f ~/test_ca/password.txt -1 -5 -8 ipa.example.test -a

Примечание

Опция -8 указывает certutil добавить расширение Subject Alternative Name (SAN) в сертификат.
Это расширение должно содержать полное доменное имя (FQDN) сервера FreeIPA (например, ipa.example.test), так как современные службы (включая Apache и Directory Server) требуют, чтобы имя хоста присутствовало в SAN, а не только в поле Subject DN.
Если расширение SAN отсутствует, команда ipa-server-install завершится ошибкой:
The server certificate in /root/test_ca/servercert.p12 is not valid: invalid for server ipa.example.test
поскольку сертификат будет считаться недействительным для указанного имени хоста.
В ответ на запросы команды дать следующие ответы:
  0 - Digital Signature
  2 - Key encipherment
  9 - done
  Is this a critical extension [y/N]? n
  1 - SSL Server
  9 - done
  Is this a critical extension [y/N]? n

Примечание

Для эксплуатации в рабочей среде рекомендуется использовать отдельные сертификаты для Directory Server и Apache.