Назад | Перейти на главную страницу

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

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

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

Я хотел бы подписать ЦС FreeIPA с ЦС существующей организации, чтобы установить цепочку доверия сертификатов. Я слежу инструкции FreeIPA по продлению сертификата CA IdM с внешней подписью вручную который, как мне кажется, покрывает подписание ЦС FreeIPA с внешним ЦС. Это произвело 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 renew в подробном режиме показывает, что он находит все сертификаты в цепочке но когда дело доходит до [искусства, где trust_chain формируется, trust_chain содержит только сертификат FreeIPA, а не остальную часть цепочки. Мне удалось воспроизвести сценарий, развернув команды и воспроизведя их в своем терминале. Вот где это ломается:

FreeIPA's ipa-cacert-manage renew звонит 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 не печатает всю цепочку, даже если сертификат подписан другим ЦС, который находится в хранилище доверенных сертификатов. Ты это видишь certutil показывает правильный цепочка, когда я вызываю ее на промежуточном ЦС:

[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 с другим внутренним центром сертификации?

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

При подписании CSR от FreeIPA, не скопируйте расширение X509v3 Authority Key Identifier. Тогда проверка будет успешной.

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