Máy chủ mới không thể tìm nạp cấu hình từ Puppetmaster do một số lỗi ssl


14

Ba máy trong môi trường sản xuất có một số vấn đề về phần cứng và đã ngừng hoạt động. Nhóm cơ sở hạ tầng đã cài đặt lại chúng và cung cấp cho chúng cùng tên máy chủ và địa chỉ IP. Mục đích là để chạy Puppet trên các hệ thống này để chúng có thể được đưa vào hoạt động trở lại.


Cố gắng

1) Chứng chỉ rối cũ đã bị xóa khỏi Puppetmaster bằng cách ban hành các lệnh sau:

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

2) Khi chứng chỉ cũ bị xóa, yêu cầu chứng chỉ mới được tạo bằng cách phát lệnh sau từ một trong các nút được cài đặt lại:

[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) Khi yêu cầu chứng chỉ được hiển thị trên Puppetmaster, lệnh sau được ban hành để ký yêu cầu chứng chỉ:

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

Vấn đề

Khi yêu cầu chứng chỉ đã được ký và chạy rối đã bắt đầu, lỗi sau đây được đưa ra:

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

Chạy rối lần thứ hai cho kết quả:

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

Phân tích

Để giải quyết vấn đề, thông báo lỗi đã được điều tra và có vẻ như vấn đề là liên quan đến SSL hoặc rối. Có lẽ một trong những gói này đã được cài đặt không chính xác hoặc một phiên bản sai đã được cài đặt trên nút được cài đặt lại.

Con rối

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

Không có sự khác biệt nào được tìm thấy giữa các gói SSL và Puppet được cài đặt trên các máy chủ khác nhau. Các hệ thống chưa được ngừng hoạt động hoặc cài đặt lại vẫn có thể chạy Puppet. Vấn đề được giới hạn ở máy chủ được cài đặt lại. Lưu ý rằng Puppet chưa được chạy trên hai máy chủ được cài đặt lại. Điều gì gây ra vấn đề này và làm thế nào để giải quyết nó?


1
Ơ Bạn đã thu hồi certs, nhưng CRL chưa được cập nhật. Bạn đã ban hành certs mới là tốt?
Deer Hunter

Nếu tôi hiểu đúng quy trình, thì lần đầu tiên puppet agent -ttôi chạy trên máy khách, nó sẽ tạo chứng chỉ và gửi cho người điều khiển rối để phê duyệt, vì vậy nếu đó là cách đúng để phát hành certs mới thì tôi đã làm.
Itai Ganot

@ItaiGanot Thật vậy, nhưng đôi khi một số chứng chỉ cũ hoặc lỗi thời cư trú trong / var / lib / Puppet / ssl trên tác nhân bị xung đột
030

Tôi chạy vào cùng một thông báo lỗi. Một điều khác để kiểm tra là nếu yêu cầu thứ 2 hiển thị cùng một fqdn như nút. Đó là yêu cầu cho thấy fqdn của bậc thầy bù nhìn.
khách

Câu trả lời:


20

Câu trả lời súc tích

Vấn đề CRL is not yet valid forchỉ ra rằng thời gian giữa Người điều khiển rối và Người điều khiển rối không đồng bộ . Đồng bộ hóa thời gian (NTP). Xóa chứng chỉ khỏi Puppet-agent và Puppetmaster và chạy Puppet trên đặc vụ.


Câu trả lời toàn diện

CRL is not yet valid for nằm trong đoạn trích sau.

Các mã kiểm tra sau đoạn mô tả những gì gây ra vấn đề:

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

môn học

subject do
  described_class.new(ssl_configuration,
  ssl_host)
end

Mã này bao gồm các đoạn từ lớp OpenSSL :: X509 :: CRL .

tổ chức phát hành = (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;
}

Các LAST_UPDATED thời gian sẽ là thời điểm hiện tại cộng với một ngày bổ sung và sẽ được truyền cho hàm đối tượng mà các cuộc gọi chức năng cuộc gọi mà cư trú trong lớp 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

Nếu preverify_ok sai, mệnh đề khác được áp dụng. Kết if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDSquả là sai vì thời gian đã được đặt ra với một ngày bổ sung, tuyên bố khác sẽ được áp dụng. Việc đánh giá @verify_errors << "#{error_string} for #{crl.issuer}"kết quả trong CRL is not yet valid for /CN=Puppet CA: puppetmaster.example.com.

Để giải quyết vấn đề:

  1. Đồng bộ hóa thời gian giữa Tác nhân bù nhìn và Người điều khiển rối. Máy chủ NTP có chạy (tốt) trên cả hai nút không?
  2. Xóa hoặc đổi tên thư mục ssl hoàn chỉnh ( / var / lib / Puppet / ssl ) khỏi tác nhân.
  3. Thu hồi chứng chỉ từ chủ bằng cách cấp sudo puppet cert clean <fqdn-puppet-agent>
  4. Ký xác nhận nếu autosign bị vô hiệu hóa
  5. Chạy rối trên đại lý

Để kết luận, thời gian trên Puppet-agent và Puppetmaster nên được đồng bộ hóa mọi lúc. Vượt quá độ lệch tối đa cho phép là 5 phút sẽ gây ra sự cố.


Tôi vẫn nhận được điều này: "[root @ grb16 ~] # Puppet agent -t Thông tin: Chứng chỉ bộ nhớ đệm cho grb16.company.com Thông tin: Bộ nhớ đệm chứng chỉ numvocation_list cho ca Lỗi: Không thể yêu cầu chứng chỉ: SSL_connect return = 1 errno = 0 state = SSLv3 đọc chứng chỉ máy chủ B: xác minh chứng chỉ không thành công: [CRL chưa hợp lệ cho / CN = Puppet CA: foreman.company.com] Đang thoát; không thể lấy chứng chỉ và Waitforcert bị vô hiệu hóa
Itai Ganot 28/12/14

@ItaiGanot Ok. / var / lib / con rối / ssl bị xóa. Chứng nhận bị xóa khỏi Puppetmaster. Bạn có thể kiểm tra xem các tác nhân kết nối với con rối phải không?
030

Nó hiện: [root @ grb16 ~] # grep server /etc/puppet/puppet.conf server = foreman.company.com
Itai Ganot

1
Bạn là đàn ông! ngớ ngẩn với tôi, quên chỉnh sửa múi giờ của máy. Cảm ơn rất nhiều!
Itai Ganot

1
Tôi cũng có vấn đề này. Hóa ra tôi cần khởi động lại ntp trên nút của mình:systemctl restart ntpd
Red Cricket

2

Ran vào cùng một vấn đề.

Thiết lập con rối của chúng tôi là phiên bản được kiểm soát bằng GitHub, vì vậy mỗi lần chúng tôi cung cấp một người điều khiển rối mới, chúng tôi gặp phải các vấn đề về chứng chỉ. Thông thường puppet ca --clean --allhoạt động, nhưng chúng tôi đã tìm thấy sau đây đáng tin cậy hơn:

rm -rf $(puppet master --configprint ssldir)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.