Trois machines de l'environnement de production ont rencontré des problèmes matériels et ont été mises hors service. L'équipe d'infrastructure les a réinstallés et leur a donné les mêmes noms d'hôte et adresses IP. L'objectif est d'exécuter Puppet sur ces systèmes afin qu'ils puissent être mis en service à nouveau.
Tentative
1) Les anciens certificats Puppet ont été supprimés du Puppetmaster en émettant les commandes suivantes:
puppet cert revoke grb16.company.com
puppet cert clean grb16.company.com
2) Une fois l'ancien certificat supprimé, une nouvelle demande de certificat a été créée en émettant la commande suivante à partir de l'un des nœuds réinstallés:
[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) Une fois la demande de certificat visible sur le Puppetmaster, la commande suivante a été émise pour signer la demande de certificat:
[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 ~]#
Problème
Une fois la demande de certificat signée et une exécution de marionnettes lancée, l'erreur suivante est générée:
[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 ~]#
Exécuter Puppet pour la deuxième fois se traduit par:
[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 ~]#
Une analyse
Afin de résoudre le problème, le message d'erreur a été étudié et il semble que le problème soit lié à SSL ou à Puppet. Peut-être l'un de ces packages a-t-il été installé de manière incorrecte ou une mauvaise version a été installée sur le nœud réinstallé.
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 ~]#
Aucune différence n'a été trouvée entre les packages SSL et Puppet installés sur divers serveurs. Les systèmes qui n'ont pas été mis hors service ou réinstallés peuvent toujours exécuter Puppet. Le problème est limité au serveur réinstallé. Notez que Puppet n'a pas été exécuté sur les deux autres serveurs réinstallés. Quelle est la cause de ce problème et comment le résoudre?
la source
puppet agent -t
que j'exécute sur le client crée le certificat et l'envoie au marionnettiste pour approbation, donc si c'est la bonne façon d'émettre de nouveaux certificats, je l'ai fait.Réponses:
Réponse concise
Le problème
CRL is not yet valid for
indique que le temps entre le Puppet-agent et le Puppetmaster n'est pas synchronisé . Synchronisez l'heure (NTP). Supprimez également le certificat de Puppet-agent et Puppetmaster et exécutez Puppet sur l'agent.Réponse complète
CRL is not yet valid for
réside dans l'extrait de code suivant.L' extrait de code de test suivant décrit les causes du problème:
ssl_context
matière
Le code inclut des extraits de la classe OpenSSL :: X509 :: CRL .
émetteur = (p1)
last_update = (p1)
L' heure last_updated sera l'heure actuelle plus un jour supplémentaire et sera transmise à la fonction sujet qui appelle la fonction d'appel qui réside dans la classe default_validator .
Si preverify_ok est faux, la clause else est applicable. En tant que
if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDS
faux, car l'heure a été tronquée avec un jour supplémentaire, la déclaration else sera applicable. L'évaluation des@verify_errors << "#{error_string} for #{crl.issuer}"
résultats enCRL is not yet valid for /CN=Puppet CA: puppetmaster.example.com
.Afin de résoudre le problème:
sudo puppet cert clean <fqdn-puppet-agent>
En conclusion, le temps sur Puppet-agents et Puppetmaster doit être synchronisé tout le temps. Le dépassement de l'écart maximal autorisé de 5 minutes entraînera le problème.
la source
systemctl restart ntpd
Ran dans le même problème.
Notre configuration de marionnettes est contrôlée par la version à l'aide de GitHub, donc chaque fois que nous provisionnons un nouveau marionnettiste, nous rencontrons des problèmes de cert. Fonctionne normalement
puppet ca --clean --all
, mais nous avons trouvé les éléments suivants plus fiables:la source