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

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

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

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

Затем я бегу puppetd --test для создания CSR для кукловода. 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. У кого-нибудь есть идеи, как решить эту проблему?

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

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

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

  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

Вы проверяли файл журнала 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

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

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

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

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

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

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

puppetd --server <hostname_of_puppet_master> <etc>

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

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

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