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

14

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


попытка

1) Старые сертификаты Puppet были удалены из 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 ~]# 

проблема

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

Итай Ганот
источник
1
Эхх. Вы отозвали сертификаты, но CRL еще не обновлен. Вы также выпустили новые сертификаты?
Охотник на оленей
Если я правильно понимаю процесс, то на первом, puppet agent -tкоторый я запускаю на клиенте, он создает сертификат и отправляет его мастеру puppetmaster для утверждения, поэтому, если это правильный способ выдачи новых сертификатов, я это сделал.
Итай Ганот
@ItaiGanot Действительно, но иногда некоторые старые или устаревшие сертификаты, которые находятся в / var / lib / puppet / ssl на агенте, конфликтуют
030
Я столкнулся с той же ошибкой MSG. Еще одна вещь, которую нужно проверить, - показывает ли 2-й запрос то же значение fqdn, что и узел. То, что запрос показывает FQDN кукольного мастера.
Гость

Ответы:

20

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

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


Комплексный ответ

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

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

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

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

+030
источник
Я все еще получаю следующее: "[root @ grb16 ~] # агент кукол -t Информация: сертификат кэширования для grb16.company.com Информация: список кэширования certificate_revocation_list для ошибки Ошибка: не удалось запросить сертификат: возвращено SSL_connect = 1 errno = 0 состояние = SSLv3 чтение сертификата сервера B: сбой проверки сертификата: [CRL еще не действителен для / CN = Puppet 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
Итай Ганот
1
Ты мужчина! глупый я, забыл отредактировать часовой пояс машины. Большое спасибо!
Итай Ганот
1
У меня тоже была эта пробема. Оказывается, мне нужно было перезапустить ntp на моем узле:systemctl restart ntpd
Red Cricket
2

Столкнулся с той же проблемой.

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

rm -rf $(puppet master --configprint ssldir)
Майк Перселл
источник