O nome do host do fantoche não corresponde ao certificado do servidor

10

Estou tentando configurar uma VM do Ubuntu com o fantoche instalado para que eu possa testar localmente nossa configuração de produção. Estou tendo problemas para convencer o mestre e o fantoche a falar um com o outro. Deixe-me levá-lo através dos meus passos. (O servidor hostnameé um FQDN do formato "web1.xxx.xxx.net").

Então, em primeiro lugar, limpo todos os arquivos pem (exceto os da CA, é claro) do /etc/puppet/ssldiretório para que eu possa começar de novo. puppetca --listnão retorna resultados.

Então, corro puppetd --testpara gerar um CSR para o puppetmaster. puppetca --listagora inclui meu nome de host ("web1.xxx.xxx.net").

Então eu corro puppetca --sign web1.xxx.xxx.net. Agora puppetca --listestá vazio novamente - tudo está funcionando bem até agora.

Por fim, eu corro puppetd --testnovamente. Eu recebo a seguinte saída:

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

A listagem do conteúdo do /etc/puppet/ssldiretório mostra os arquivos PEM com o nome do servidor correto, que corresponde ao meu hostname. Alguém tem alguma idéia de como atacar esse problema?

RISCfuture
fonte

Respostas:

9

O erro ocorre porque o cliente, por padrão, se conecta ao nome do host do servidor 'fantoche', mas o certificado apresentado não possui 'fantoche' como assunto ou como atributo SubjectAltName.

Para corrigi-lo, você pode (escolha um):

  1. em vez de inicializar o certificado do puppetmaster executando puppetd, inicie-o executando puppetmasterd- isso fará com que o nome do assunto do certificado inclua "puppet".

  2. em vez de deixar as coisas ao acaso, você pode usar puppetca --generate --certdnsnames puppet:puppet.mydomain.com web1.xx.xx.xx.net- a opção certdnsnames especifica uma lista de SubjectAltNames que será incluída no certificado; deve ter uma lista separada por dois pontos de qualquer nome que um cliente usaria para entrar em contato com o servidor.

  3. em vez de apenas executar puppetd --testno cliente, execute puppetd --test --server=web1.xx.xx.xx.netpara que o nome do servidor ao qual o cliente se conecte seja aquele que realmente existe no certificado apresentado pelo servidor.

Confira a excelente entrada de blog da masterzen para obter mais soluções para problemas: Puppet SSL Explained

Eric Sorenson
fonte
3

Você verificou o arquivo de log do puppetmaster? Encontrei o mesmo problema e descobri que o servidor registra as informações do certificado:

[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

O campo Subject mostra que o CN é "ubuntu.localdomain", então eu executei o fantoche fazendo:

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

Espero que isto ajude :-)

Pablo Torrecilla
fonte
2

Além do que Pau respondeu, eu gostaria de destacar que você pode inspecionar o certificado do puppetmasters usando:

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

Em seguida, certifique-se de usar exatamente o mesmo nome de host quando do cliente:

puppetd --server <hostname_of_puppet_master> <etc>
3molo
fonte
0

Ambos os servidores são capazes de resolver um ao outro? Meu palpite é que, como você está usando o VMing, pode estar faltando a resolução do nome. Se você não usar o DNS para permitir que os servidores se resolvam, será necessário adicionar entradas ao seu /etc/hostsarquivo nos dois servidores.

O Puppet exige que os nomes dos hosts resolvam os IPs corretos, sem isso você receberá o erro mencionado. Pode ser necessário recriar certificados depois de fazer isso. Ambas as máquinas devem poder executar ping cada uma por nome de host.

Outra coisa a ter cuidado com as VMs é que você sincroniza os horários nos servidores. Caso contrário, é provável que os certificados sejam inválidos.

Joshua Enfield
fonte
Ah, eu deveria ter especificado. Puppet e Puppetmaster estão sendo executados no mesmo servidor; minha VM. E sim, posso executar ping no computador usando o FQDN.
RISCfuture
Desculpe Joshua que está incorreto. O fantoche não faz validação de DNS-> IP contra o certificado apresentado. Ele faz a validação do nome do host para o certificado, que é o que está causando o erro.
precisa saber é o seguinte