Tres máquinas en el entorno de producción tenían algunos problemas de hardware y fueron retiradas del servicio. El equipo de infraestructura los reinstaló y les dio los mismos nombres de host y direcciones IP. El objetivo es ejecutar Puppet en estos sistemas para que puedan volver a ponerse en servicio.
Intento
1) Los antiguos certificados de Puppet se eliminaron del Puppetmaster emitiendo los siguientes comandos:
puppet cert revoke grb16.company.com
puppet cert clean grb16.company.com
2) Una vez que se eliminó el certificado anterior, se creó una nueva solicitud de certificado emitiendo el siguiente comando desde uno de los nodos 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) Una vez que la solicitud de certificado estaba visible en Puppetmaster, se emitió el siguiente comando para firmar la solicitud 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
Una vez que se ha firmado la solicitud de certificado y se ha iniciado una ejecución de Puppet, se produce el siguiente error:
[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 ~]#
Ejecutar Puppet por segunda vez da como resultado:
[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álisis
Para resolver el problema, se investigó el mensaje de error y parece que el problema está relacionado con SSL o Puppet. Quizás uno de estos paquetes se haya instalado incorrectamente o se haya instalado una versión incorrecta en el nodo reinstalado.
Marioneta
[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 ~]#
No se encontraron discrepancias entre los paquetes SSL y Puppet que están instalados en varios servidores. Los sistemas que no han sido retirados del servicio o reinstalados aún pueden ejecutar Puppet. El problema está restringido al servidor reinstalado. Tenga en cuenta que Puppet no se ha ejecutado en los otros dos servidores reinstalados. ¿Qué está causando este problema y cómo solucionarlo?
fuente
puppet agent -t
que ejecuto en el cliente crea el certificado y lo envía al puppetmaster para su aprobación, así que si esa es la forma correcta de emitir nuevos certificados, lo hice.Respuestas:
Respuesta concisa
El problema
CRL is not yet valid for
indica que el tiempo entre el Puppet-agent y el Puppetmaster no está sincronizado . Sincronizar la hora (NTP). Elimine el certificado del Puppet-agent y Puppetmaster también y ejecute Puppet en el agente.Respuesta integral
CRL is not yet valid for
reside en el siguiente fragmento.El siguiente fragmento de código de prueba describe las causas del problema:
ssl_context
tema
El código incluye fragmentos de la clase OpenSSL :: X509 :: CRL .
emisor = (p1)
last_update = (p1)
La última hora actualizada será la hora actual más un día adicional y se pasará a la función de asunto que llama a la función de llamada que reside en la clase default_validator .
Si preverify_ok es falso, se aplica la cláusula else. Como
if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDS
resultado es falso porque el tiempo se ha topado con un día adicional, se aplicará la declaración else La evaluación de@verify_errors << "#{error_string} for #{crl.issuer}"
resultados enCRL is not yet valid for /CN=Puppet CA: puppetmaster.example.com
.Para resolver el problema:
sudo puppet cert clean <fqdn-puppet-agent>
En conclusión, el tiempo en Puppet-agents y Puppetmaster debe estar sincronizado todo el tiempo. Exceder la desviación máxima permitida de 5 minutos causará el problema.
fuente
systemctl restart ntpd
Me encontré con el mismo problema.
Nuestra configuración de títeres está controlada por la versión usando GitHub, por lo que cada vez que aprovisionamos un nuevo puppetmaster, nos encontramos con problemas de certificación. Normalmente
puppet ca --clean --all
funciona, pero hemos encontrado lo siguiente más confiable:fuente