Имя хоста Puppet не соответствует сертификату сервера

10

Я пытаюсь настроить виртуальную машину Ubuntu с установленным puppet, чтобы я мог локально протестировать нашу производственную настройку. У меня проблемы с тем, чтобы заставить марионетку и кукловода поговорить друг с другом. Позвольте мне провести вас через мои шаги. (Сервер hostnameявляется полным доменным именем формата "web1.xxx.xxx.net").

Итак, во-первых, я удаляю все файлы pem (за исключением, конечно, CA pems) из /etc/puppet/sslкаталога, чтобы я мог начать все сначала. puppetca --listне возвращает результатов.

Затем я бегу, puppetd --testчтобы сгенерировать CSR для puppetmaster. puppetca --listтеперь включает мое имя хоста ("web1.xxx.xxx.net").

Тогда я бегу puppetca --sign web1.xxx.xxx.net. Теперь puppetca --listснова пусто - пока все работает нормально.

Наконец я puppetd --testснова бегу . Я получаю следующий вывод:

err: Could not retrieve catalog from remote server: hostname was not match with the server certificate
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run

В списке содержимого /etc/puppet/sslкаталога показаны файлы PEM с правильным именем сервера, которое совпадает с моим hostname. У кого-нибудь есть идеи о том, как атаковать эту проблему?

RISCfuture
источник

Ответы:

9

Ошибка заключается в том, что клиент по умолчанию подключается к имени хоста сервера «puppet», но представленный сертификат не имеет «puppet» ни в качестве своего предмета, ни в качестве атрибута SubjectAltName.

Чтобы исправить это, вы можете (выбрать один):

  1. вместо того, чтобы инициализировать сертификат вашего puppetmaster, запустив puppetd, инициализируйте его, запустив puppetmasterd- это заставит имя субъекта сертификата включать «puppet».

  2. вместо того, чтобы puppetca --generate --certdnsnames puppet:puppet.mydomain.com web1.xx.xx.xx.netрисковать, вы можете использовать - опция certdnsnames указывает список SubjectAltNames, которые будут включены в сертификат; он должен иметь разделенный двоеточиями список любого имени, которое клиент будет использовать для связи с сервером.

  3. вместо того, чтобы просто работать puppetd --testна клиенте, запустите puppetd --test --server=web1.xx.xx.xx.netтак, чтобы имя сервера, к которому подключается клиент, было тем, которое фактически существует в сертификате, представленном сервером.

Посмотрите отличную запись в блоге masterzen для дальнейшего поиска неисправностей: Puppet SSL Explained

Эрик Соренсон
источник
3

Вы проверяли файл журнала puppetmaster? Я обнаружил ту же проблему и обнаружил, что сервер регистрирует информацию о сертификате:

[2012-02-28 16:21:09] INFO  
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2 (0x2)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=ca
        Validity
            Not Before: Feb 26 16:32:46 2012 GMT
            Not After : Feb 24 16:32:46 2017 GMT
        Subject: CN=ubuntu.localdomain

Поле Subject показывает, что CN - это «ubuntu.localdomain», поэтому я выполнил куклу, выполнив:

puppetd -t --server=ubuntu.localdomain --fqdn=myfqdn

Надеюсь это поможет :-)

Пабло Торресилья
источник
2

В дополнение к тому, что ответил Пау, я хотел бы подчеркнуть, что вы можете проверить сертификат puppetmasters, используя:

openssl x509 -text -in /var/lib/puppet/ssl/certs/<hostname_of_puppet_master>

Затем убедитесь, что вы используете точно такое же имя хоста, когда с клиента:

puppetd --server <hostname_of_puppet_master> <etc>
3molo
источник
0

Могут ли оба сервера разрешать друг друга? Я предполагаю, что, поскольку вы используете виртуальную машину, вам может не хватать разрешения имени. Если вы не используете DNS, чтобы серверы разрешали друг друга, вам нужно добавить записи в ваш /etc/hostsфайл на обоих серверах.

Puppet требует, чтобы имена хостов соответствовали правильным IP-адресам, без этого вы получите ошибку, которую вы упомянули. Возможно, вам придется воссоздать сертификаты после этого. Обе машины должны иметь возможность пинговать каждую по имени хоста.

Еще одна вещь, с которой нужно быть осторожным с виртуальными машинами, это то, что вы синхронизируете время на серверах. Если вы этого не сделаете, скорее всего сертификаты будут недействительными.

Джошуа Энфилд
источник
Ах, я должен был указать. Puppet и Puppetmaster работают на одном сервере; моя вм. И да, я могу пропинговать компьютер от себя, используя FQDN.
RISCfuture
Извините, Джошуа, это неправильно. Puppet не выполняет проверку DNS-> IP в соответствии с представленным сертификатом. Он действительно проверяет имя хоста на имя сертификата, что и является причиной ошибки.
Эрик Соренсон