Как мне подписать новый внутренний ЦС сервера FreeIPA с моим внутренним ЦС организации?

В моей организации есть внутренний центр сертификации (CA)который мы уже сгенерировали и установили на машины.

Я настраиваю сервер FreeIPA LDAP / Kerberos , и после начальной установки он сгенерировал собственный внутренний ЦС, который я можно увидеть в веб-интерфейсе.

Я хотел бы подписать ЦС FreeIPA с ЦС существующей организации, чтобы установить цепочку доверия сертификатов. Я следую инструкциям FreeIPA по продлению сертификата CA IdM с внешней подписью вручную , которые, как мне кажется, охватывают подписание CA FreeIPA с внешним CA. Это привело к созданию CSR, который я подписал с использованием существующего CA для создания нового подписанного CA FreeIPA.

Однако я застрял, пытаясь повторно импортировать недавно подписанный CA + цепочку сертификатов с помощью ipa-cacert-manage Renew --external-cert-file команда. Когда я запускаю это в соответствии с инструкциями, я получаю сообщение об ошибке, что цепочка сертификатов CA неполная, потому что отсутствует один из сертификатов в цепочке:

[root@lockandkey ~]# ipa-cacert-manage renew --external-cert-file=/tmp/LockAndKey_FreeIPA_CA.crt  --external-cert-file=/tmp/dfca.crt --external-cert-file=/tmp/jgca.crt 
Importing the renewed CA certificate, please wait
CA certificate chain in /tmp/LockAndKey_FreeIPA_CA.crt, 
/tmp/dfca.crt, /tmp/jgca.crt is incomplete: missing certificate with subject 
'E=domains@digitalfruition.com,CN=ca.digitalfruition.com,OU=Internal CA,O=Digital Fruition\, LLC,L=Newland,ST=North Carolina,C=US'
The ipa-cacert-manage command failed.

Однако этот сертификат был предоставлен в одном из аргументы - external-cert-file . Я также попытался использовать файл «CA Bundle» (несколько сертификатов в одном файле), и результат был таким же.

Если копать дальше, проблема, похоже, связана с load_external_cert в installutils.py

    trust_chain = list(reversed(nssdb.get_trust_chain(ca_nickname)))
    ca_cert_chain = []
    for nickname in trust_chain:
        cert, subject, issuer = cache[nickname]
        ca_cert_chain.append(cert)
        if subject == issuer:
            break
    else:
        raise ScriptError(
            "CA certificate chain in %s is incomplete: "
            "missing certificate with subject '%s'" %
            (", ".join(files), issuer))

Выполнение ipa-cacert-manage refresh в подробном режиме показывает, что действительно находит все сертификаты в цепочке , но когда попадает в [art where trust_chain trust_chain содержит только сертификат FreeIPA, а не остальную часть цепочки . Мне удалось воспроизвести сценарий, развернув команды и воспроизведя их в своем терминале. Вот где он ломается:

FreeIPA ipa-cacert-manage refresh вызывает certutil , чтобы «распечатать цепочку сертификатов» с помощью параметра -O , а именно:

[root@lockandkey ~]# /usr/bin/certutil -d dbm:/tmp/tmppTphXX -O -n 'CN=Certificate Authority,O=FARCRY.SITEPALETTE.COM' -f /tmp/tmppTphXX/pwdfile.txt
"CN=Certificate Authority,O=FARCRY.SITEPALETTE.COM" [CN=Certificate Authority,O=FARCRY.SITEPALETTE.COM]

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

[root@lockandkey ~]# /usr/bin/certutil -d dbm:/tmp/tmppTphXX -O -n 'E=domains@digitalfruition.com,CN=ca.digitalfruition.com,OU=Internal CA,O=Digital Fruition\, LLC,L=Newland,ST=North Carolina,C=US' -f /tmp/tmppTphXX/pwdfile.txt
"E=CA@josh.gitlin.name,CN=Joshua Gitlin,OU=ca.josh.gitlin.name,O=Personal Certificate Authority,L=Newland,ST=North Carolina,C=US" [E=CA@josh.gitlin.name,CN=Joshua Gitlin,OU=ca.josh.gitlin.name,O=Personal Certificate Authority,L=Newland,ST=North Carolina,C=US]

  "E=domains@digitalfruition.com,CN=ca.digitalfruition.com,OU=Internal CA,O=Digital Fruition\, LLC,L=Newland,ST=North Carolina,C=US" [E=domains@digitalfruition.com,CN=ca.digitalfruition.com,OU=Internal CA,O="Digital Fruition, LLC",L=Newland,ST=North Carolina,C=US]

Итак, я считаю, что это проблема с certutil , но это все, что я получил.

Продолжая отладку, я решил, что по какой-то причине certutil не нравится созданный мной сертификат, поэтому это может быть проблема с чем-то по этой CSR. Другие сертификаты подтверждают штраф ...

Я что-то не так делаю? Как правильно подписать центр сертификации FreeIPA с другим внутренним ЦС?

4
задан 5 June 2019 в 00:54
1 ответ

Я обнаружил проблему. CSR, сгенерированный FreeIPA, включает расширение «X509v3 Authority Key Identifier», установленное на идентификатор ключа закрытого ключа FreeIPA. Это заставляет certutil полагать, что CA является самоподписанным и не следует цепочке сертификатов.

При подписании CSR от FreeIPA, не копирует расширение идентификатора ключа центра сертификации X509v3 . Тогда проверка будет успешной.

(Также: убедитесь, что подписанный сертификат CA использовал UTF8 для кодирования имени субъекта; см. Несоответствие кодировки имени субъекта в документации)

1
ответ дан 3 December 2019 в 04:07

Теги

Похожие вопросы