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


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


попытка

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

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

проблема

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

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

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

[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 или Puppet. Возможно, один из этих пакетов установлен неверно или на переустановленном узле установлена ​​неправильная версия.

Кукольный

[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 и Puppet, установленными на разных серверах, не обнаружено. Системы, которые не были выведены из эксплуатации или переустановлены, все еще могут запускать Puppet. Проблема ограничивается переустановленным сервером. Обратите внимание, что Puppet не запускается на двух других переустановленных серверах. Что вызывает эту проблему и как ее решить?


11
2017-12-28 11:16


Источник


Эхх. Вы отозвали сертификаты, но CRL еще не обновлен. Вы также выдали новые сертификаты? - Deer Hunter
Если я правильно понял процесс, то на первом puppet agent -t который я запускаю на клиенте, он создает сертификат и отправляет его кукловодству для утверждения, поэтому, если это правильный способ выпускать новые сертификаты, я это сделал. - Itai Ganot
@ItaiGanot Действительно, но иногда некоторые старые или устаревшие сертификаты, которые находятся в / var / lib / puppet / ssl на агенте, конфликтуют - 030
Я столкнулся с тем же сообщением об ошибке. Еще одна вещь, которую нужно проверить, - это если второй запрос показывает тот же fqdn, что и узел. Что запрос показывает fqdn марионеточного мастера. - guest


Ответы:


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

Проблема 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;
}

последнее обновление время будет текущим временем плюс дополнительный день и будет передано субъектной функции, которая вызывает функция вызова который находится в Класс 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 / Библиотека / кукольный / SSL) от агента.
  3. Отменить сертификат от мастера путем выдачи sudo puppet cert clean <fqdn-puppet-agent>
  4. Подпишите сертификат, если отключен автозапуск
  5. Запустить марионетку на агента

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


17
2017-12-28 11:28



Я все еще получаю это: «[root @ grb16 ~] # кукольный агент -t Информация: Кэширующий сертификат для grb16.company.com Информация: Caching certificate_revocation_list для ca Ошибка: не удалось запросить сертификат: SSL_connect возвращен = 1 errno = 0 state = SSLv3 читать сертификат сервера B: проверка сертификата не удалась: [CRL еще не действителен для / CN = Кукольный CA: foreman.company.com] Выход из системы, не удалось получить сертификат и waitforcert отключен - Itai Ganot
@ItaiGanot Хорошо. / var / lib / puppet / ssl удален. Сертификат удален от кукольного мастера. Не могли бы вы проверить, подключен ли агент к правильному кукловодству? - 030
Он делает: [root @ grb16 ~] # grep server /etc/puppet/puppet.conf server = foreman.company.com - Itai Ganot
Ты мужчина! глупый, забыл отредактировать часовой пояс машины. Большое спасибо! - Itai Ganot
У меня тоже была эта пробема. Оказывается, мне нужно было перезапустить ntp на моем узле: systemctl restart ntpd - Red Cricket


Иди в эту же проблему.

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

rm -rf $(puppet master --configprint ssldir)

2
2017-10-08 15:40