Новый сервер, не могущий выбирать конфигурацию от Puppetmaster из-за некоторой ssl ошибки

Три машины в продуктивной среде имели некоторые аппаратные проблемы и были выведены из эксплуатации. Рабочая группа обслуживания инфраструктуры переустановила их и дала им те же имена хостов и IP-адреса. Цель состоит в том, чтобы выполнить Марионетку в этих системах, таким образом, они могут быть уполномочены снова.


Попытка

1) Старые Марионеточные сертификаты были удалены из Puppetmaster путем выдачи следующих команд:

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

2) После того как старый сертификат был удален, новый запрос сертификата был создан путем выдачи следующей команды от одного из переустановленных узлов:

[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) После того как запрос сертификата был видим на Puppetmaster, следующая команда была дана для подписания запроса сертификата:

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

Проблема

После того как запрос сертификата был подписан, и выполненная Марионетка была запущена, следующая ошибка брошена:

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

Рабочая Марионетка во второй раз приводит к:

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

Анализ

Для решения проблемы, сообщение об ошибке были исследованы, и похоже, что проблемой является SSL или связанная Марионетка. Возможно, один из этих пакетов был установлен неправильно, или неверная версия была установлена на переустановленном узле.

Марионетка

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

Никакие несоответствия не были найдены между SSL и Марионеточными пакетами, которые установлены на различных серверах. Системы, которые не были списаны или переустановлены, все еще могут выполнить Марионетку. Проблема ограничивается переустановленным сервером. Обратите внимание, что Марионетка не была выполнена на других двух переустановленных серверах. Что вызывает эту проблему и как решить ее?

12
задан 31 August 2015 в 12:04
2 ответа

Краткий ответ

Проблема CRL еще не действительна для означает, что время между Puppet-agent и Puppetmaster не синхронизировано . Синхронизировать время (NTP). Удалите сертификат из Puppet-agent и Puppetmaster, а также запустите Puppet на агенте.


Полный ответ

CRL еще не действителен для находится в следующем фрагменте.

следующий Фрагмент тестового кода описывает причину проблемы:

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

subject

subject do
  described_class.new(ssl_configuration,
  ssl_host)
end

Код включает фрагменты из класса OpenSSL :: X509 :: CRL .

издатель = ( 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 будет текущим временем плюс дополнительный день и будет передано в функцию-субъект, которая вызывает функцию вызова , которая находится в классе 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

Если preverify_ok имеет значение false, применимо условие else. Поскольку , если crl.last_update && crl.last_update приводит к ложному результату, так как время было заглушено дополнительным днем, будет применяться оператор else. Оценка @verify_errors << "# {error_string} для # {crl.issuer}" приводит к CRL еще не действителен для / CN = Puppet CA: puppetmaster.example.com .

Для решения проблемы:

  1. Синхронизируйте время между Puppet-agent и Puppetmaster. Сервер NTP работает (хорошо) на обоих узлах?
  2. Удалите или переименуйте всю папку ssl ( / var / lib / puppet / ssl ) от агента.
  3. Отзовите сертификат от мастера, выполнив sudo puppet cert clean
  4. Подпишите сертификат, если автоподпись отключена
  5. Запустите марионетку на агенте

В заключение, время на Puppet-agent и Puppetmaster должно быть постоянно синхронизировано. Превышение максимально допустимого отклонения в 5 минут вызовет проблему.

18
ответ дан 2 December 2019 в 21:34

Возникла та же проблема.

Наша марионетка - это версия контролируется с помощью GitHub, поэтому каждый раз, когда мы предоставляем нового мастера марионеток, мы сталкиваемся с проблемами сертификата. Обычно puppet ca --clean --all работает, но мы сочли следующие более надежными:

rm -rf $(puppet master --configprint ssldir)
2
ответ дан 2 December 2019 в 21:34

Теги

Похожие вопросы