Três máquinas no ambiente de produção tiveram alguns problemas de hardware e foram descomissionadas. A equipe de infraestrutura os reinstalou e forneceu os mesmos nomes de host e endereços IP. O objetivo é executar o Puppet nesses sistemas para que eles possam ser comissionados novamente.
Tentativa
1) Os antigos certificados Puppet foram removidos do Puppetmaster emitindo os seguintes comandos:
puppet cert revoke grb16.company.com
puppet cert clean grb16.company.com
2) Depois que o certificado antigo foi removido, uma nova solicitação de certificado foi criada emitindo o seguinte comando de um dos nós reinstalados:
[root@grb16 ~]# puppet agent -t
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for grb16.company.com
Info: Certificate Request fingerprint (SHA256): 6F:2D:1D:71:67:18:99:86:2C:22:A1:14:80:55:34:35:FD:20:88:1F:36:ED:A7:7B:2A:12:09:4D:F8:EC:BF:6D
Exiting; no certificate found and waitforcert is disabled
[root@grb16 ~]#
3) Depois que a solicitação de certificado ficou visível no Puppetmaster, o seguinte comando foi emitido para assinar a solicitação de certificado:
[root@foreman ~]# puppet cert sign grb16.company.com
Notice: Signed certificate request for grb16.company.com
Notice: Removing file Puppet::SSL::CertificateRequest grb16.company.com at '/var/lib/puppet/ssl/ca/requests/grb16.company.com.pem'
[root@foreman ~]#
Problema
Após a assinatura do pedido de certificado e a execução de uma marionete, o seguinte erro é gerado:
[root@grb16 ~]# puppet agent -t
Info: Caching certificate for grb16.company.com
Error: Could not request certificate: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [CRL is not yet valid for /CN=Puppet CA: foreman.company.com]
Exiting; failed to retrieve certificate and waitforcert is disabled
[root@grb16 ~]#
Executar o Puppet pela segunda vez resulta em:
[root@grb16 ~]# puppet agent -t
Warning: Unable to fetch my node definition, but the agent run will continue:
Warning: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [CRL is not yet valid for /CN=Puppet CA: foreman.company.com]
Info: Retrieving pluginfacts
Error: /File[/var/lib/puppet/facts.d]: Failed to generate additional resources using 'eval_generate': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [CRL is not yet valid for /CN=Puppet CA: foreman.company.com]
Error: /File[/var/lib/puppet/facts.d]: Could not evaluate: Could not retrieve file metadata for puppet://foreman.company.com/pluginfacts: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [CRL is not yet valid for /CN=Puppet CA: foreman.company.com]
Wrapped exception:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [CRL is not yet valid for /CN=Puppet CA: foreman.company.com]
Info: Retrieving plugin
Error: /File[/var/lib/puppet/lib]: Failed to generate additional resources using 'eval_generate': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [CRL is not yet valid for /CN=Puppet CA: foreman.company.com]
Error: /File[/var/lib/puppet/lib]: Could not evaluate: Could not retrieve file metadata for puppet://foreman.company.com/plugins: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [CRL is not yet valid for /CN=Puppet CA: foreman.company.com]
Wrapped exception:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [CRL is not yet valid for /CN=Puppet CA: foreman.company.com]
Error: Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [CRL is not yet valid for /CN=Puppet CA: foreman.company.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=SSLv3 read server certificate B: certificate verify failed: [CRL is not yet valid for /CN=Puppet CA: foreman.company.com]
[root@grb16 ~]#
Análise
Para resolver o problema, a mensagem de erro foi investigada e parece que o problema está relacionado ao SSL ou ao Puppet. Talvez um desses pacotes tenha sido instalado incorretamente ou uma versão errada tenha sido instalada no nó reinstalado.
Fantoche
[root@grb16 ~]# yum list installed |grep puppet
facter.x86_64 1:2.3.0-1.el6 @puppetlabs_6_products
hiera.noarch 1.3.4-1.el6 @puppetlabs_6_products
puppet.noarch 3.7.3-1.el6 @puppetlabs_6_products
puppetlabs-release.noarch
6-11 @puppetlabs_6_products
ruby-augeas.x86_64 0.4.1-3.el6 @puppetlabs_6_deps
ruby-shadow.x86_64 1:2.2.0-2.el6 @puppetlabs_6_deps
rubygem-json.x86_64 1.5.5-3.el6 @puppetlabs_6_deps
SSL
[root@grb16 ~]# yum list installed |grep ssl
nss_compat_ossl.x86_64 0.9.6-1.el6 @anaconda-CentOS-201410241409.x86_64/6.6
openssl.x86_64 1.0.1e-30.el6_6.4
openssl-devel.x86_64 1.0.1e-30.el6_6.4
[root@grb16 ~]#
Não foram encontradas discrepâncias entre os pacotes SSL e Puppet instalados em vários servidores. Os sistemas que não foram descomissionados ou reinstalados ainda podem executar o Puppet. O problema está restrito ao servidor reinstalado. Observe que o Puppet não foi executado nos outros dois servidores reinstalados. O que está causando esse problema e como resolvê-lo?
fonte
puppet agent -t
que eu corro no cliente, ele cria o certificado e o envia ao puppetmaster para aprovação. Portanto, se esse é o caminho certo para emitir novos certificados, eu o fiz.Respostas:
Resposta concisa
O problema
CRL is not yet valid for
indica que o tempo entre o agente Puppet e o Puppetmaster está fora de sincronia . Sincronize a hora (NTP). Remova o certificado do Puppet-agent e do Puppetmaster também e execute o Puppet no agente.Resposta abrangente
CRL is not yet valid for
reside no seguinte snippet.O seguinte snippet de código de teste descreve o que causa o problema:
ssl_context
sujeito
O código inclui trechos da classe OpenSSL :: X509 :: CRL .
emissor = (p1)
last_update = (p1)
O horário last_updated será o horário atual mais um dia adicional e será passado para a função de assunto que chama a função de chamada que reside na classe default_validator .
Se preverify_ok for false, a cláusula else é aplicável. Como
if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDS
resulta em false, porque o horário foi stubed com mais um dia, a instrução else será aplicável. A avaliação dos@verify_errors << "#{error_string} for #{crl.issuer}"
resultados emCRL is not yet valid for /CN=Puppet CA: puppetmaster.example.com
.Para resolver o problema:
sudo puppet cert clean <fqdn-puppet-agent>
Em conclusão, o tempo em Puppet-agents e Puppetmaster deve ser sincronizado o tempo todo. Exceder o desvio máximo permitido de 5 minutos causará o problema.
fonte
systemctl restart ntpd
Ocorreu o mesmo problema.
Nossa configuração de marionetes é controlada por versão usando o GitHub; portanto, toda vez que provisionamos um novo mestre de marionetes, encontramos problemas de certificação. Normalmente
puppet ca --clean --all
funciona, mas achamos o seguinte mais confiável:fonte