Trzy maszyny w środowisku produkcyjnym miały pewne problemy ze sprzętem i zostały wycofane z eksploatacji. Zespół infrastruktury zainstalował je ponownie i nadał im te same nazwy hostów i adresy IP. Celem jest uruchomienie Puppet na tych systemach, aby można je było ponownie uruchomić.
Próba
1) Stare certyfikaty Puppet zostały usunięte z Puppetmaster, wydając następujące polecenia:
puppet cert revoke grb16.company.com
puppet cert clean grb16.company.com
2) Po usunięciu starego certyfikatu utworzono nowe żądanie certyfikatu, wydając następujące polecenie z jednego z ponownie zainstalowanych węzłów:
[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) Gdy żądanie certyfikatu było widoczne w Puppetmaster, wydano następującą komendę, aby podpisać prośbę o certyfikat:
[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 ~]#
Problem
Po podpisaniu żądania certyfikatu i rozpoczęciu biegu Puppet generowany jest następujący błąd:
[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 ~]#
Uruchomienie Puppet po raz drugi powoduje:
[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 ~]#
Analiza
Aby rozwiązać problem, zbadano komunikat o błędzie i wygląda na to, że problem dotyczy protokołu SSL lub Puppet. Być może jeden z tych pakietów został zainstalowany niepoprawnie lub w przeinstalowanym węźle zainstalowano niewłaściwą wersję.
Marionetka
[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 ~]#
Nie znaleziono rozbieżności między pakietami SSL i Puppet zainstalowanymi na różnych serwerach. Systemy, które nie zostały wycofane z eksploatacji ani ponownie zainstalowane, nadal mogą uruchamiać Puppet. Problem jest ograniczony do przeinstalowanego serwera. Pamiętaj, że Puppet nie został uruchomiony na dwóch pozostałych przeinstalowanych serwerach. Co powoduje ten problem i jak go rozwiązać?
źródło
puppet agent -t
uruchomieniu na kliencie tworzy on certyfikat i wysyłam go do zatwierdzenia przez puppetmastera, więc jeśli to właściwy sposób wydawania nowych certyfikatów, to zrobiłem to.Odpowiedzi:
Zwięzła odpowiedź
Problem
CRL is not yet valid for
wskazuje, że czas między agentem marionetkowym a mistrzem marionetek nie jest zsynchronizowany . Synchronizuj czas (NTP). Usuń certyfikat również z Puppet-agent i Puppetmaster, a następnie uruchom Puppet na agencie.Kompleksowa odpowiedź
CRL is not yet valid for
znajduje się w następującym fragmencie.Poniższy kod testowy fragment opisuje, co powoduje ten problem:
ssl_context
Przedmiot
Kod zawiera fragmenty z klasy OpenSSL :: X509 :: CRL .
emitent = (p1)
last_update = (p1)
Czas ostatniej aktualizacji będzie bieżącym czasem plus dodatkowy dzień i zostanie przekazany do funkcji podmiotu, która wywołuje funkcję wywołania, która znajduje się w klasie default_validator .
Jeśli parametr preverify_ok ma wartość false, zastosowanie ma klauzula else. Ponieważ
if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDS
wynikiem jest fałsz, ponieważ czas został skasowany z dodatkowym dniem, zastosowanie będzie miała instrukcja else. Ocena@verify_errors << "#{error_string} for #{crl.issuer}"
wyników wCRL is not yet valid for /CN=Puppet CA: puppetmaster.example.com
.Aby rozwiązać problem:
sudo puppet cert clean <fqdn-puppet-agent>
Podsumowując, czas na Puppet-agentów i Puppetmaster powinien być zsynchronizowany przez cały czas. Przekroczenie maksymalnego dopuszczalnego odchylenia 5 minut spowoduje problem.
źródło
systemctl restart ntpd
Wpadłem na ten sam problem.
Nasza konfiguracja lalek jest kontrolowana w wersji za pomocą GitHub, więc za każdym razem, gdy zapewniamy nowego lalekmistrza, napotykamy problemy z certyfikatami. Zwykle
puppet ca --clean --all
działa, ale znaleźliśmy następujące bardziej niezawodne:źródło