Puppet Windows Agent не может подключиться - проверка сертификата не удалась: не удалось получить сертификат эмитента для / CN = Puppet

Я установил марионеточный сервер и агент, примите запрос исходного агента с помощью sudo / opt / puppetlabs / bin / puppetserver ca sign --certname mywindowshost на сервер.

Я вижу, что сертификаты помещены ниже и существуют для корневого CA сервера, и сертификат для агента:

C:\Windows\system32>puppet agent --configprint localcacert 
C:/ProgramData/PuppetLabs/puppet/etc/ssl/certs/ca.pem

Однако, выполнив приведенное ниже на агенте, чтобы проверить его, я получаю следующее:

C:\Windows\system32>puppet agent --test
Warning: Unable to fetch my node definition, but the agent run will continue:
Warning: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [unable to get issuer certificate for /CN=Puppet CA: puppet.mydomain.com]
Info: Retrieving pluginfacts
Error: /File[C:/ProgramData/PuppetLabs/puppet/cache/facts.d]: Failed to generate additional resources using 'eval_generate': SSL_connect returned=1 errno=0 state=error: certificate verify failed: [unable to get issuer certificate for /CN=Puppet CA: puppet.mydomain.com]
Error: /File[C:/ProgramData/PuppetLabs/puppet/cache/facts.d]: Could not evaluate: Could not retrieve file metadata for puppet:///pluginfacts: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [unable to get issuer certificate for /CN=Puppet CA: puppet.mydomain.com]
Info: Retrieving plugin
Error: /File[C:/ProgramData/PuppetLabs/puppet/cache/lib]: Failed to generate additional resources using 'eval_generate': SSL_connect returned=1 errno=0 state=error: certificate verify failed: [unable to get issuer certificate for /CN=Puppet CA: puppet.mydomain.com]
Error: /File[C:/ProgramData/PuppetLabs/puppet/cache/lib]: Could not evaluate: Could not retrieve file metadata for puppet:///plugins: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [unable to get issuer certificate for /CN=Puppet CA: puppet.mydomain.com]
Error: Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [unable to get issuer certificate for /CN=Puppet CA: puppet.mydomain.com]
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
Error: Could not send report: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [unable to get issuer certificate for /CN=Puppet CA: puppet.mydomain.com]

Я могу чтобы увидеть сертификат, если я перехожу в веб-браузер с машины агента на https://puppet.mydomain.com:8140/puppet-ca/v1/certificate/ca , отображается сертификат CA.

На клиенте C: \ ProgramData \ PuppetLabs \ puppet \ etc \ puppet.conf показан ниже:

[main]
server=puppet.mydomain.com
autoflush=true
manage_internal_file_permissions=false

На сервере /etc/puppetlabs/puppet/puppet.conf показан ниже:

[master]
dns_alt_names = puppet.mydomain.com,puppet-svr1
vardir = /opt/puppetlabs/server/data/puppetserver
logdir = /var/log/puppetlabs/puppetserver
rundir = /var/run/puppetlabs/puppetserver
pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid
codedir = /etc/puppetlabs/code

[main]
certname = puppet.mydomain.com
server = puppet.mydomain.com
environment = production
runinterval = 15m

На сервере можно увидеть сертификаты в формате:

admin@puppet-svr1:/etc/puppetlabs/puppet$ sudo /opt/puppetlabs/bin/puppetserver ca list --all
Signed Certificates:
    home                              (SHA256)  5E:2D:70:03:B1:A4:81:50:ED:A7:10:88:FD:8E:D0:A6:85:0D:27:D9:A0:65:86:2D:D5:C6:08:B3:C9:4D:37:90
    puppet.mydomain.com               (SHA256)  4A:14:F1:FB:5D:23:AC:D9:D8:A3:EA:D7:F0:68:B2:7D:9C:46:4D:77:68:F7:E9:5A:3B:61:07:24:3F:20:6B:B3 alt names: ["DNS:puppet.mydomain.com", "DNS:puppet-svr1", "DNS:puppet.mydomain.com"]

Все DNS разрешаются как от самого сервера (к себе на его IP-адрес), так и от агента.

Время согласовывается и синхронизируется между агентом и сервером.

Я также выполнил процедуру сброса CA и получил точно такую ​​же ошибку https://puppet.com/docs/puppet/6.4/ssl_regenerate_certificates.html .

Я заметил, что сертификат, указанный в https: //puppet.mydomain.com: 8140 / puppet-ca / v1 / certificate / ca содержит два сертификата (один расположен поверх другого), тогда как один находится в каталоге агента C: / ProgramData / PuppetLabs / puppet / etc /ssl/certs/ca.pem содержит только один из этих сертификатов (между ----- BEGIN CERTIFICATE ---- и ----- END CERTIFICATE ----- , самый верхний).

ОБНОВЛЕНИЕ ПОТЕНЦИАЛЬНАЯ ПРОБЛЕМА ОБНАРУЖЕНА. Я запустил его сейчас с certificate_revocation = false и с использованием сертификата полной цепочки из https://puppet.mydomain.com:8140/puppet-ca/ v1 / certificate / ca

Я считаю, что обнаружил проблему, проверяя выданный агентом автоматически загружаемый CA (у которого был только один CA), я получил следующее:

C:\ProgramData\PuppetLabs\puppet\etc\ssl\certs>openssl verify -CAfile ca.pem home-hv1.pem
home-hv1.pem: CN = Puppet CA: puppet.mydomain.com
error 2 at 1 depth lookup:unable to get issuer certificate

Затем я заменил цепочку . ca (на котором были оба сертификата) как ca.pem и повторно запущен:

C:\ProgramData\PuppetLabs\puppet\etc\ssl\certs>openssl verify -CAfile ca.pem home-hv1.pem
home-hv1.pem: OK

Однако при запуске теста он жалуется на отсутствие CRL (действительно, я не вижу URL-адрес CRL, упомянутый в сгенерированном сертификате) :

C:\ProgramData\PuppetLabs\puppet\etc\ssl\certs>puppet agent --test
Warning: Unable to fetch my node definition, but the agent run will continue:
Warning: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [unable to get certificate CRL for /CN=Puppet CA: puppet.mydomain.com]

Обновление puppet.conf на агенте до:

[main]
server=puppet.mydomain.com
autoflush=true
manage_internal_file_permissions=false
certificate_revocation = false

И перезапуск службы, после чего она запустилась:

Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for home-hv1
Info: Applying configuration version '1559933691'

Мне не нравится работать без CRL, но почему он вообще не предоставляется?

Есть какие-то шаги, которые я пропустил или делаю что-то не так, или это ошибка?

Есть идеи, что еще проверить, пожалуйста, чтобы это работало, не возясь из коробки?

0
задан 7 June 2019 в 22:01
1 ответ

Я думаю, что в некоторых версиях puppetserver (или, возможно, при использовании puppetserver ca setup для инициализации CA) ваш CA создается с промежуточным сертификатом в цепочке, но когда сертификат клиента подписывается, /etc/puppetlabs/puppet/ssl/certs/ca.pem на клиенте не имеет этого промежуточного звена, поэтому вы получаете сообщение об ошибке типа:

Ошибка: / файл [/ opt / puppetlabs / puppet / cache / fact.d]: не удалось оценить: не удалось получить метаданные файла для марионетки: /// pluginfacts: SSL_connect return = 1 errno = 0 state = error: проверка сертификата завершилась неудачно: [невозможно получить сертификат эмитента для / CN = Puppet CA: puppet.example.com]

Ошибка: не удалось отправить отчет: SSL_connect возвращено = 1 errno = 0 state = error: проверка сертификата не удалась: [невозможно получить сертификат эмитента для / CN = Puppet CA: puppet.example. com]

Или даже после того, как все заработало, список отозванных сертификатов по-прежнему не работает:

Ошибка: не удалось запросить сертификат: запрос https://puppet.example.com:8140//puppet -ca / v1 / certificate / k8s-3813-kam1 не удалось: SSL_connect возвращено = 1 errno = 0 состояние = ошибка: проверка сертификата не удалась: [невозможно получить CRL сертификата для / CN = Puppet CA: puppet.example.com ]

Простое исправление - загрузка полного открытого ключа CA и перезапись неправильной цепочки на клиенте. Предположим, что puppet.example.com - ваш хозяин:

sudo wget --no-check-certificate https://puppet.example.com:8140/puppet-ca/v1/certificate/ca -O /etc/puppetlabs/puppet/ssl/certs/ca.pem

sudo puppet agent --test --certificate_revocation=false
# or you can add the following to your /etc/puppetlabs/puppet/puppet.conf
[main]
certificate_revocation = false
1
ответ дан 10 December 2019 в 19:11

Теги

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