Server baru tidak dapat mengambil konfigurasi dari Puppetmaster karena beberapa kesalahan ssl

14

Tiga mesin di lingkungan produksi memiliki beberapa masalah perangkat keras dan dinonaktifkan. Tim infrastruktur telah menginstal ulang mereka dan memberi mereka nama host dan alamat IP yang sama. Tujuannya adalah untuk menjalankan Wayang pada sistem ini sehingga ini dapat ditugaskan lagi.


Mencoba

1) Sertifikat Wayang lama dihapus dari Dalang dengan mengeluarkan perintah berikut:

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

2) Setelah sertifikat lama dihapus, permintaan sertifikat baru dibuat dengan mengeluarkan perintah berikut dari salah satu node yang diinstal ulang:

[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) Setelah permintaan sertifikat terlihat di Puppetmaster, perintah berikut dikeluarkan untuk menandatangani permintaan sertifikat:

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

Masalah

Setelah permintaan sertifikat telah ditandatangani dan menjalankan Wayang telah dimulai kesalahan berikut dilemparkan:

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

Running Puppet untuk kedua kalinya menghasilkan:

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

Analisis

Untuk mengatasi masalah ini, pesan kesalahan diselidiki dan sepertinya masalahnya adalah SSL atau Wayang terkait. Mungkin salah satu dari paket ini telah diinstal secara tidak benar atau versi yang salah telah diinstal pada node yang diinstal ulang.

Wayang

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

Tidak ada perbedaan yang ditemukan antara paket SSL dan Boneka yang diinstal pada berbagai server. Sistem yang belum dinonaktifkan atau diinstal ulang masih dapat menjalankan Wayang. Masalahnya terbatas pada server yang diinstal ulang. Perhatikan bahwa Wayang belum dijalankan pada dua server yang diinstal ulang lainnya. Apa yang menyebabkan masalah ini dan bagaimana cara mengatasinya?

Itai Ganot
sumber
1
Ehh. Anda telah mencabut sertifikat, tetapi CRL belum diperbarui. Sudahkah Anda mengeluarkan sertifikat baru juga?
Pemburu Rusa
Jika saya memahami prosesnya dengan benar, maka pada yang pertama puppet agent -tsaya jalankan pada klien itu menciptakan sertifikat dan mengirimkannya ke puppetmaster untuk persetujuan, jadi jika itu cara yang tepat untuk mengeluarkan sertifikat baru maka saya lakukan.
Itai Ganot
@ItaiGanot Memang, tetapi kadang-kadang beberapa sertifikat lama atau kedaluwarsa yang berada di / var / lib / boneka / ssl pada agen tersebut bertentangan
030
Saya mengalami pesan kesalahan yang sama. Hal lain yang perlu diperiksa adalah jika permintaan ke-2 menunjukkan fqdn yang sama dengan simpul. Bahwa permintaan menunjukkan fqdn dari master boneka.
tamu

Jawaban:

20

Jawaban singkat

Masalahnya CRL is not yet valid formenunjukkan bahwa waktu antara agen Wayang dan Kepala Boneka tidak sinkron . Sinkronkan waktu (NTP). Hapus sertifikat dari Agen Wayang dan juga Wayang dan jalankan Wayang pada agen.


Jawaban komprehensif

CRL is not yet valid for berada di cuplikan berikut.

The berikut kode uji potongan menjelaskan apa yang menyebabkan masalah ini:

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

subyek

subject do
  described_class.new(ssl_configuration,
  ssl_host)
end

Kode ini termasuk cuplikan dari kelas OpenSSL :: X509 :: CRL .

penerbit = (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;
}

Waktu last_updated akan menjadi waktu saat ini ditambah hari tambahan dan akan diteruskan ke fungsi subjek yang memanggil fungsi panggilan yang berada di kelas default_validator .

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

Jika preverify_ok salah, klausa lain berlaku. Akibatnya if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDSsalah karena waktu telah dimatikan dengan hari tambahan pernyataan lain akan berlaku. Evaluasi @verify_errors << "#{error_string} for #{crl.issuer}"hasil dalam CRL is not yet valid for /CN=Puppet CA: puppetmaster.example.com.

Untuk mengatasi masalah ini:

  1. Sinkronkan waktu antara Agen Boneka dan Kepala Boneka. Apakah server NTP berjalan (baik) di kedua node?
  2. Hapus atau ganti nama folder ssl lengkap ( / var / lib / puppet / ssl ) dari agen.
  3. Cabut sertifikat dari master dengan menerbitkan sudo puppet cert clean <fqdn-puppet-agent>
  4. Tanda tangani sertifikat jika tanda otomatis dinonaktifkan
  5. Jalankan boneka pada agen

Kesimpulannya, waktu pada Agen Wayang dan Wayang harus disinkronkan setiap saat. Melebihi deviasi maksimum yang diizinkan 5 menit akan menyebabkan masalah.

030
sumber
Saya masih mendapatkan ini: "[root @ grb16 ~] # agen boneka -t Info: Caching sertifikat untuk grb16.company.com Info: Caching Certificate_revocation_list untuk ca Kesalahan: Tidak dapat meminta sertifikat: SSL_connect kembali = 1 errno = 0 negara = SSLv3 baca sertifikat server B: verifikasi sertifikat gagal: [CRL belum berlaku untuk / CN = Wayang CA: foreman.company.com] Keluar; gagal mengambil sertifikat dan sertifikat tunggu dinonaktifkan
Itai Ganot
@ ItaiGanot Ok. / var / lib / boneka / ssl dihapus. Cert dihapus dari Puppetmaster. Bisakah Anda memeriksa apakah agen terhubung ke kepala boneka yang tepat?
030
Itu tidak: [root @ grb16 ~] # grep server /etc/puppet/puppet.conf server =
foreman.company.com
1
Kamulah orangnya! konyol saya, lupa mengedit zona waktu mesin. Terima kasih banyak!
Itai Ganot
1
Saya punya masalah ini juga. Ternyata saya perlu me-restart ntp pada node saya:systemctl restart ntpd
Red Cricket
2

Berlari ke masalah yang sama.

Pengaturan boneka kami adalah versi yang dikontrol menggunakan GitHub, jadi setiap kali kami menyediakan seorang juru boneka baru, kami mengalami masalah sertifikat. Biasanya puppet ca --clean --allberfungsi, tetapi kami telah menemukan yang berikut ini lebih andal:

rm -rf $(puppet master --configprint ssldir)
Mike Purcell
sumber