7.2.5. Настройка Kerberos для получения тикетов при аутентификации под доменным пользователем по сертификату в FreeIPA
Проблема
Заголовок раздела «Проблема»Пользователю предлагается ввести PIN-код от электронного ключа JaCarta®, но, вместо входа выводится ошибка “системная ошибка”, а в журнале работы системы сказано “Client name mismatch”.
Причина
Заголовок раздела «Причина»Не настроен Kerberos и недоработан профиль KDCs_PKINIT_Certs на стороне сервера FreeIPA.
Решение
Заголовок раздела «Решение»Следует убедиться в том, что модуль PKINIT установлен в системе и, в случае если модуль не установлен — установить. Воспользуйтесь следующей командой:
apt-get install krb5-pkinitДалее необходимо получить тикет пользователя admin, чтобы получить доступ к командам FreeIPA. Воспользуйтесь следующей командой:
kinit adminЗапустите модуль PKINIT. Воспользуйтесь следующей командой:
ipa-pkinit-manage enableОткройте конфигурационный файл kdc.conf. Расположение для Astra Orel:
/etc/krb5kdc/kdc.confРасположение данного конфигурационного файла может отличаться на разных системах!
Найдите в файле блок [realms] и добавьте в него следующие строки:
pkinit_eku_checking = nonepkinit_allow_upn = trueОткройте конфигурационный файл krb5.conf. Расположение для Astra Orel:
/etc/krb5.confРасположение данного конфигурационного файла может отличаться на разных системах!
Найдите в файле блок [libdefaults] и добавьте в него следующие строки:
pkinit_eku_checking = nonepkinit_allow_upn = trueПосле изменения конфигурационных файлов необходимо сообщить об этом службам krb5kdc и kadmin. Используйте следующие команды:
systemctl restart krb5kdc.servicesystemctl restart kadmin.serviceДалее необходимо создать новый профиль выпуска сертификатов FreeIPA. Для этого перейдем в директорию расположения этих сертификатов. Расположение для Astra Orel:
/usr/share/ipa/profiles/В данной директории необходимо получить копию профиля KDCs_PKINIT_Certs и сохранить ее в отдельный файл SecurLogon®.cfg. Воспользуйтесь следующей командой:
ipa certprofile-show --out SecurLogon.cfg KDCs_PKINIT_CertsОткройте полученный ранее файл SecurLogon.cfg. Необходимо дополнить следующие параметры.
Параметр ID профиля:
profileId=profileId=SecurLogonПараметр, ответственный за предоставление выпущенным сертификатам разрешений на те или иные действия (необходимо: Аутентификация пользователя, проверка через модуль PKINIT, Аутентификация сервера):
policyset.serverCertSet.7.default.params.exKeyUsageOIDs=policyset.serverCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.1,1.3.6.1.5.2.3.5,1.3.6.1.5.5.7.3.2Разрешим подпись сертификата необходимыми алгоритмами:
policyset.serverCertSet.8.constraint.params.signingAlgsAllowed=policyset.serverCertSet.8.constraint.params.signingAlgsAllowed=SHA1withRSA,SHA256withRSA,SHA384withRSA,SHA512withRSA,SHA1withDSA,SHA1withEC,SHA256withEC,SHA384withEC,SHA512withECДобавим новые блоки, ответственные за подпись SAN (Альтернативные имена получателя). Это требование работы PKINIT, без SAN в записи сертификата PKINIT будет считать сертификат не верифицированным.
Сообщим сертификату о количестве и названиях блоков:
policyset.serverCertSet.list=policyset.serverCertSet.list=1,2,3,4,5,6,7,8,9,10,11,12,13В разных версиях может не хватать блока 11 и/или 12!
Если у вас нет блока 11, необходимо его дописать в конце файла:
policyset.serverCertSet.11.constraint.class_id=noConstraintImplpolicyset.serverCertSet.11.constraint.name=No Constraintpolicyset.serverCertSet.11.default.class_id=userExtensionDefaultImplpolicyset.serverCertSet.11.default.name=User Supplied Extension Defaultpolicyset.serverCertSet.11.default.params.userExtOID=2.5.29.17Если у вас нет блока 12, необходимо его дописать в конце файла:
policyset.serverCertSet.12.constraint.class_id=noConstraintImplpolicyset.serverCertSet.12.constraint.name=No Constraintpolicyset.serverCertSet.12.default.class_id=commonNameToSANDefaultImplpolicyset.serverCertSet.12.default.name=Copy Common Name to Subject Alternative NameБлок 13 должен выглядеть следующим образом, за исключением @FREE.IPA — вместо этого добавьте название своего доменного имени в верхнем регистре:
policyset.serverCertSet.13.constraint.class_id=noConstraintImplpolicyset.serverCertSet.13.constraint.name=No Constraintpolicyset.serverCertSet.13.default.class_id=subjectAltNameExtDefaultImplpolicyset.serverCertSet.13.default.name=Subject Alt Name Constraintpolicyset.serverCertSet.13.default.params.subjAltNameExtCritical=falsepolicyset.serverCertSet.13.default.params.subjAltExtType_0=RFC822Namepolicyset.serverCertSet.13.default.params.subjAltExtPattern_0=$request.req_subject_name.cn$@FREE.IPApolicyset.serverCertSet.13.default.params.subjAltExtGNEnable_0=truepolicyset.serverCertSet.13.default.params.subjAltExtType_1=OtherNamepolicyset.serverCertSet.13.default.params.subjAltExtPattern_1=(UTF8String)1.3.6.1.4.1.311.20.2.3,$request.req_subject_name.cn$@FREE.IPApolicyset.serverCertSet.13.default.params.subjAltExtGNEnable_1=truepolicyset.serverCertSet.13.default.params.subjAltNameNumGNs=2Сохраните изменения в файле.
Следующим шагом необходимо показать FreeIPA, что у нас появился новый профиль. Для этого импортируем ранее редактируемый файл как профиль:
ipa certprofile-import SecurLogon --file=SecurLogon.cfgПосле всех манипуляций сертификаты, выпущенные с помощью созданного профиля, будут проходить проверку PKINIT, и получать тикеты Kerberos.

