В моей организации есть внутренний центр сертификации (ЦС), который мы уже создали и установили на машины.
Я настраиваю Сервер 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 для кодирования имени субъекта; см. Несоответствие кодировки имени субъекта в документации)