Yeni sunucu, bazı SSL hataları nedeniyle Puppetmaster'dan yapılandırma getiremedi


14

Üretim ortamındaki üç makinede bazı donanım sorunları vardı ve kullanımdan kaldırıldı. Altyapı ekibi bunları yeniden kurdu ve aynı ana bilgisayar adlarını ve IP adreslerini verdi. Amaç Kuklaları bu sistemlerde çalıştırmak ve böylece yeniden devreye alınabilmektir.


Girişim

1) Eski Kukla sertifikaları, aşağıdaki komutlar verilerek Kukla Yöneticisinden kaldırılmıştır:

puppet cert revoke grb16.company.com
puppet cert clean grb16.company.com

2) Eski sertifika kaldırıldıktan sonra, yeniden yüklenen düğümlerden birinden aşağıdaki komutu vererek yeni bir sertifika isteği oluşturuldu:

[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) Sertifika isteği Puppetmaster'da göründüğünde, sertifika isteğini imzalamak için aşağıdaki komut verildi:

[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 ~]# 

Sorun

Sertifika isteği imzalandıktan ve bir Kukla çalışması başlatıldıktan sonra aşağıdaki hata atılır:

[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 ~]# 

Kuklayı ikinci kez çalıştırmak şöyle sonuçlanır:

[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 ~]# 

analiz

Sorunu çözmek için hata mesajı araştırıldı ve sorunun SSL veya Kukla ile ilgili olduğu anlaşılıyor. Bu paketlerden biri yanlış yüklenmiş veya yeniden yüklenmiş düğüme yanlış bir sürüm yüklenmiş.

Kukla

[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 ~]# 

Çeşitli sunuculara yüklenen SSL ve Kukla paketleri arasında herhangi bir tutarsızlık bulunamadı. Hizmetten çıkarılmayan veya yeniden kurulmayan sistemler hala Kukla çalıştırabilir. Sorun, yeniden yüklenen sunucuyla sınırlıdır. Yeniden yüklenen diğer iki sunucuda Kukla çalıştırılmadığını unutmayın. Bu soruna neden olan nedir ve nasıl çözülür?


1
Ehh. Sertifikaları iptal ettiniz, ancak CRL henüz güncellenmedi. Siz de yeni sertifikalar verdiniz mi?
Deer Hunter

Süreci doğru bir şekilde anlarsam, o zaman puppet agent -tmüşteri üzerinde çalıştırdığım ilk önce sertifikayı oluşturur ve onay için kukla yöneticisine gönderir, bu yüzden yeni cerler çıkarmanın doğru yolu buysa.
Itai Ganot

@ItaiGanot Gerçekten, ama bazen ajan üzerinde / var / lib / kukla / ssl içinde bulunan bazı eski veya güncel olmayan sertifikalar çakışıyor
030

Aynı hata msj ile karşılaştım. Kontrol edilecek başka bir şey, 2. isteğin düğümle aynı fqdn'yi gösterip göstermediğidir. Bu isteğin kukla ustasının fqdn'sini göstermesi.
konuk

Yanıtlar:


20

Kısa cevap

Sorun CRL is not yet valid forgösterir kukla-madde ve Puppetmaster arasındaki zaman senkronize değil . Saati senkronize edin (NTP). Sertifikayı Kukla aracısı ve Kuklacıdan da kaldırın ve aracıda Kukla çalıştırın.


Kapsamlı cevap

CRL is not yet valid for aşağıdaki kod parçasında bulunur.

Pasajı aşağıdaki test kodu sorunu neyin sebep açıklar:

it 'includes the CRL issuer in the verify error message' do
  crl = OpenSSL::X509::CRL.new
  crl.issuer = OpenSSL::X509::Name.new([['CN','Puppet CA: puppetmaster.example.com']])
  crl.last_update = Time.now + 24 * 60 * 60
  ssl_context.stubs(:current_crl).returns(crl)

  subject.call(false, ssl_context)
  expect(subject.verify_errors).to eq(["CRL is not yet valid for /CN=Puppet CA: puppetmaster.example.com"])
end

ssl_context

let(:ssl_context) do
  mock('OpenSSL::X509::StoreContext')
end

konu

subject do
  described_class.new(ssl_configuration,
  ssl_host)
end

Kod, OpenSSL :: X509 :: CRL sınıfından parçacıklar içerir .

yayıncı = (P1)

               static VALUE
ossl_x509crl_set_issuer(VALUE self, VALUE issuer)
{
    X509_CRL *crl;

    GetX509CRL(self, crl);

    if (!X509_CRL_set_issuer_name(crl, GetX509NamePtr(issuer))) { /* DUPs name */
        ossl_raise(eX509CRLError, NULL);
    }
    return issuer;
}

last_update = (P1)

               static VALUE
ossl_x509crl_set_last_update(VALUE self, VALUE time)
{
    X509_CRL *crl;
    time_t sec;

    sec = time_to_time_t(time);
    GetX509CRL(self, crl);
    if (!X509_time_adj(crl->crl->lastUpdate, 0, &sec)) {
        ossl_raise(eX509CRLError, NULL);
    }

    return time;
}

LAST_UPDATED zaman şimdiki zaman artı ek bir gün olacak ve aramaları konusu işlevine geçirilecek çağrı işlevi içinde bulunduğunu ifade default_validator sınıfına .

class Puppet::SSL::Validator::DefaultValidator #< class Puppet::SSL::Validator
  attr_reader :peer_certs
  attr_reader :verify_errors
  attr_reader :ssl_configuration

  FIVE_MINUTES_AS_SECONDS = 5 * 60

  def initialize(
    ssl_configuration = Puppet::SSL::Configuration.new(
    Puppet[:localcacert], {
      :ca_auth_file => Puppet[:ssl_client_ca_auth]
    }),

    ssl_host = Puppet::SSL::Host.localhost)
    reset!
    @ssl_configuration = ssl_configuration
    @ssl_host = ssl_host
  end

  def call(preverify_ok, store_context)
    if preverify_ok
      ...
    else
      ...
      crl = store_context.current_crl
      if crl
        if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDS
          ...
        else
          @verify_errors << "#{error_string} for #{crl.issuer}"
        end
        ...
      end
    end
  end

Preverify_ok yanlışsa, başka bir hüküm uygulanabilir. Sonuç if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDSyanlış olduğu için zaman ek bir gün ile saplanmış olduğu için else ifadesi uygulanacaktır. Değerlendirilmesi @verify_errors << "#{error_string} for #{crl.issuer}"sonuçları CRL is not yet valid for /CN=Puppet CA: puppetmaster.example.com.

Sorunu çözmek için:

  1. Kukla aracısı ile Kuklacı arasındaki zamanı senkronize edin. NTP sunucusu her iki düğümde de çalışıyor mu (iyi)?
  2. Tüm ssl klasörünü ( / var / lib / puppet / ssl ) aracıdan kaldırın veya yeniden adlandırın .
  3. Sertifikayı vererek ustayı iptal et sudo puppet cert clean <fqdn-puppet-agent>
  4. Otomatik imza devre dışı bırakılmışsa sertifikayı imzalayın
  5. Aracıda kukla çalıştırın

Sonuç olarak, Kuklacıların ve Kuklacıların zamanları her zaman senkronize edilmelidir. İzin verilen maksimum 5 dakikalık sapmayı aşmak soruna neden olur.


Hala bunu alıyorum: "[root @ grb16 ~] # kukla aracı -t Bilgi: grb16.company.com için önbellek sertifikası Bilgi: ca için önbellekleme sertifika_vokasyonu_list Hata: Sertifika istenemedi: SSL_connect döndürüldü = 1 errno = 0 durum = SSLv3 sunucu sertifikası B'yi oku: sertifika doğrulaması başarısız oldu: [CRL henüz / CN = Puppet CA: foreman.company.com için geçerli değil] Çıkılıyor; sertifika alınamadı ve waitforcert devre dışı
Itai

@ItaiGanot Tamam. / var / lib / kukla / ssl kaldırıldı. Sertifika Puppetmaster'dan kaldırıldı. Temsilcinin doğru kukla yöneticisine bağlanıp bağlanmadığını kontrol edebilir misiniz?
030

Şunları yapar: [root @ grb16 ~] # grep sunucusu /etc/puppet/puppet.conf sunucusu = foreman.company.com
Itai

1
Sen adamsın! aptal bana, makinenin saat dilimini düzenlemeyi unuttum. Çok teşekkürler!
Itai Ganot

1
Ben de bu problemi yaşadım. Düğümde ntp'yi yeniden başlatmam gerektiği ortaya çıktı:systemctl restart ntpd
Red Cricket

2

Aynı sorunla karşılaştı.

Kukla kurulumumuz GitHub kullanılarak sürüm kontrollüdür, bu nedenle her yeni bir kuklacı sağladığımızda sertifika sorunları ile karşılaşırız. Normalde puppet ca --clean --allçalışır, ancak aşağıdakileri daha güvenilir bulduk:

rm -rf $(puppet master --configprint ssldir)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.