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

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


Попытка

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

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

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

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

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

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

Проблема

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

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

Запуск Puppet во второй раз приводит к:

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

Анализ

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

Кукольный

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

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

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

12 голосов | спросил Itai Ganot 28 SunEurope/Moscow2014-12-28T14:16:27+03:00Europe/Moscow12bEurope/MoscowSun, 28 Dec 2014 14:16:27 +0300 2014, 14:16:27

2 ответа


18

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

Проблема CRL is not yet valid for указывает, что время между кукольным агентом и кукольным мастером не синхронизируется . Синхронизировать время (NTP). Удалите сертификат от кукольного агента и кукольного мастера, а также запустите кукол на агента.


Полный ответ

CRL is not yet valid for находится в следующем фрагменте.

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

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 do
  described_class.new(ssl_configuration,
  ssl_host)
end

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

= эмитент (р1)

               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 = (р1)

               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. Поскольку if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDS приводит к false, потому что время было заострено с дополнительным днем, когда будет применяться инструкция else. Оценка @verify_errors << "#{error_string} for #{crl.issuer}" приводит к CRL is not yet valid for /CN=Puppet CA: puppetmaster.example.com.

Чтобы решить проблему:

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

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

ответил 030 28 SunEurope/Moscow2014-12-28T14:28:27+03:00Europe/Moscow12bEurope/MoscowSun, 28 Dec 2014 14:28:27 +0300 2014, 14:28:27
2

Включите эту же проблему.

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

rm -rf $(puppet master --configprint ssldir)
ответил Mike Purcell 8 +03002015-10-08T18:40:03+03:00312015bEurope/MoscowThu, 08 Oct 2015 18:40:03 +0300 2015, 18:40:03

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132