При развертывании FreeIPA в Astra Linux может возникнуть проблема с Центром Сертификации(Certificate Authority/CA), заключающаяся в том, что dogtag-pki - стандартный CA для FreeIPA - не входит в основной (main) репозиторий системы. Поэтому, установки с его использованием могут быть не аттестованы.
Одним из решений, в таком случае, может стать установка FreeIPA в CA-less режиме: когда выпуск сертификатов возлагается, в том числе, на ручные операции с использованием аттестованных инструментов (openssl)
Состоит из трех файлов, содержащих:
ca.key
- приватный ключ (конфиденциальная информация)ca.crt
- корневой сертификат инфраструктурыca.srl
- серийный номер последнего выданного сертификатаСоздается командой:
openssl genrsa -out ca.key # 4096
Можно указать длину ключа, по умолчанию используется минимально допустимая на текущий момент (2048)
В простейшем случае создается командой:
openssl req -x509 -sha256 -new -key ca.key -out ca.crt
Будут запрошены сведения о субъекте-владельце сертификата (subject), обязательным из которых является только Common Name.
Для автоматизации ответов на такие запросы используется ключ:
-subj "/C=RU/ST=StateName/L=CityName/O=CompanyName/OU=CompanySectionName/CN=CommonNameOrHostname"
При создании корневого сертификата скорее всего потребуется указать срок его действия,
так как значение по умолчанию (1 год) может быть слишком коротким.
Для этого используется ключ:
-days "N"
Наконец, трюк: выпуск сертификата с настраиваемым сроком использования (потребуются права суперпользователя и изменение локального времени на системе):
systemctl stop systemd-timesyncd.service date -u 010100002025.00 openssl req -x509 -sha256 -new -key ca.key -out ca.crt -subj "/CN=Certificate Authority ALIENNET.RU" -days 27393 openssl x509 -in ca.crt -text -noout | egrep "CN|Not" systemctl start systemd-timesyncd.service
Будет выпущен сертификат:
Issuer: CN=Certificate Authority ALIENNET.RU Not Before: Jan 1 00:00:00 2025 GMT Not After : Jan 1 00:00:00 2100 GMT Subject: CN=Certificate Authority ALIENNET.RU
У всех сертификатов должен быть уникальный серийный номер.
В качестве начального значения можно использовать серийный номер корневого сертификата:
eval $(openssl x509 -in ca.crt -noout -serial); echo $serial > ca.srl
или при генерации самого первого клиентского сертификата указать на необходимость создания такого файла:
-CAcreateserial
Все следующие сертификаты создавать с использованием этого файла:
-CAserial ca.srl
https://k5wiki.kerberos.org/wiki/Pkinit_configuration
https://web.mit.edu/kerberos/krb5-1.17/doc/admin/pkinit.html
Для полнофункциональной работы контроллера домена потребуются 3 (три) сертификата:
SSL certificate options: --dirsrv-cert-file = File containing the Directory Server SSL certificate and private key --http-cert-file = File containing the Apache Server SSL certificate and private key --pkinit-cert-file = File containing the Kerberos KDC SSL certificate and private key
Но можно вместо трех разных использовать один - специальным образом созданный сертификат со всеми необходимыми атрибутами.
Пример конфигурационного файла атрибутов для контроллера dc1 домена ipa.aliennet.ru (dc1.ipa.aliennet.ru):
SERVER=dc1.ipa.aliennet.ru DOMAIN=${SERVER#*.} cat > dc.ini << EOF [kdc_cert] basicConstraints = CA:FALSE keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment, keyAgreement extendedKeyUsage = 1.3.6.1.5.5.7.3.1, 1.3.6.1.5.2.3.5 subjectKeyIdentifier = hash authorityKeyIdentifier = keyid, issuer issuerAltName = issuer:copy subjectAltName = otherName:1.3.6.1.5.2.2;SEQUENCE:kdc_princ_name,DNS:${SERVER,,},DNS:${DOMAIN,,} [kdc_princ_name] realm = EXP:0, GeneralString:${DOMAIN^^} principal_name = EXP:1, SEQUENCE:kdc_principal_seq [kdc_principal_seq] name_type = EXP:0, INTEGER:1 name_string = EXP:1, SEQUENCE:kdc_principals [kdc_principals] princ1 = GeneralString:krbtgt princ2 = GeneralString:${DOMAIN^^} EOF
Создать ключ и запрос на сертификат:
openssl genrsa -out server.key # 4096 openssl req -new -key server.key -out server.csr -subj "/CN=$SERVER" openssl req -in server.csr -text -noout -verify
Выпустить сертификат (на 10 лет, с учетом серийного номера):
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -out server.crt -CAserial ca.srl \ -days 3650 -extfile dc.ini -extensions kdc_cert openssl x509 -in server.crt -text -noout
Подготовить PKCS#12 контейнер с цепочкой сертификатов и приватным ключом (потребуется придумать пароль):
cat ca.crt >> server.crt openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt openssl pkcs12 -in server.p12 -nodes
Итоговый файл-контейнер server.p12 будет необходим для продвижения сервера dc1.ipa.aliennet.ru до роли первого контроллера в домене или до реплики, если домен уже создан и контроллер(ы) существуют.
В качестве примера, выпуск сертификата для web-сервера www.aliennet.ru:
openssl genrsa -out server.key # 4096 openssl req -new -key server.key -out server.csr \ -subj "/CN=www.aliennet.ru" \ -addext "subjectAltName=DNS:www.aliennet.ru,DNS:aliennet.ru,IP:127.0.0.1" openssl req -in server.csr -text -noout -verify
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -out server.crt \ -CAserial ca.srl \ -sha256 \ -days 3650 \ -extfile <(echo "subjectAltName=DNS:www.aliennet.ru,DNS:aliennet.ru,IP:127.0.0.1") openssl x509 -in server.crt -text -noout
Результат: server.key и server.crt (включающий Subject Alternative Name/SAN)