नया सर्वर कुछ ssl त्रुटि के कारण Puppetmaster से कॉन्फ़िगरेशन लाने में असमर्थ है


14

उत्पादन वातावरण में तीन मशीनों में कुछ हार्डवेयर समस्याएँ थीं और इनका विघटन किया गया था। बुनियादी ढांचे की टीम ने उन्हें फिर से स्थापित किया है और उन्हें समान होस्टनाम और आईपी पते दिए हैं। इसका उद्देश्य इन प्रणालियों पर कठपुतली को चलाना है ताकि इन्हें फिर से चालू किया जा सके।


प्रयास

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) एक बार पुप्पेटमास्टर पर प्रमाणपत्र अनुरोध दिखाई देने के बाद, प्रमाणपत्र अनुरोध पर हस्ताक्षर करने के लिए निम्नलिखित आदेश जारी किया गया था:

[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  

एसएसएल

[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 और कठपुतली संकुल के बीच कोई विसंगतियां नहीं पाई गईं जो विभिन्न सर्वरों पर स्थापित हैं। जिन सिस्टमों का डीकोमिशन या रीइंस्टॉल नहीं किया गया है, वे अभी भी पपेट को चलाने में सक्षम हैं। समस्या पुनर्स्थापना सर्वर के लिए प्रतिबंधित है। ध्यान दें कि कठपुतली को अन्य दो रीइंस्टॉल्ड सर्वर पर नहीं चलाया गया है। इस समस्या का कारण क्या है और इसे कैसे हल किया जाए?


1
Ehh। आपने समारोहों को रद्द कर दिया है, लेकिन CRL अभी तक अपडेट नहीं किया गया है। क्या आपने नए सिरेट्स जारी किए हैं?
हिरण हंटर

यदि मैं प्रक्रिया को सही ढंग से समझता हूं, तो पहले puppet agent -tजो मैं क्लाइंट पर चलाता हूं, वह सर्टिफिकेट बनाता है और उसे अनुमोदन के लिए कठपुतली को भेजता है, इसलिए यदि यह नए सिरे से जारी करने का सही तरीका है तो मैंने किया।
इटई गनोट

@ इताईनॉट दरअसल, लेकिन कभी-कभी कुछ पुराने या पुराने प्रमाणपत्र जो एजेंट पर / var / lib / कठपुतली / ssl में रहते हैं, परस्पर विरोधी हैं
0:30

मैं उसी त्रुटि संदेश में भाग गया। जांच करने के लिए एक और बात यह है कि यदि दूसरा अनुरोध नोड के समान fqdn दिखाता है। यह अनुरोध कठपुतली मास्टर के fqdn दिखाता है।
अतिथि

जवाबों:


20

संक्षिप्त उत्तर

मुद्दा 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 वर्ग के स्निपेट शामिल हैं ।

जारीकर्ता = (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 मिथ्या है तो अन्य खंड लागू होता है। if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDSपरिणाम के रूप में गलत है क्योंकि समय एक अतिरिक्त दिन के साथ अटक गया है दूसरा कथन लागू होगा। में @verify_errors << "#{error_string} for #{crl.issuer}"परिणामों का मूल्यांकन CRL is not yet valid for /CN=Puppet CA: puppetmaster.example.com

समस्या को हल करने के लिए:

  1. कठपुतली-एजेंट और कठपुतली के बीच का समय सिंक करें। क्या एनटीपी सर्वर दोनों नोड्स पर (अच्छी तरह से) चलता है?
  2. एजेंट से पूरा ssl फ़ोल्डर ( / var / lib / कठपुतली / ssl ) को निकालें या उसका नाम बदलें ।
  3. जारी करके मास्टर से प्रमाणपत्र रद्द करें sudo puppet cert clean <fqdn-puppet-agent>
  4. यदि ऑटोसाइन अक्षम है, तो प्रमाणपत्र पर हस्ताक्षर करें
  5. एजेंट पर कठपुतली चलाएं

अंत में, कठपुतली-एजेंटों और कठपुतली पर समय को हर समय सिंक किया जाना चाहिए। 5 मिनट की अधिकतम अनुमत विचलन से अधिक समस्या का कारण होगा।


मुझे अभी भी यह मिलता है: "[root @ grb16 ~] # कठपुतली एजेंट -t जानकारी: grb16.company.com के लिए कैशिंग सर्टिफिकेट जानकारी: कैशिंग सर्टिफिकेट_revocation_list for ca एरर: प्रमाणपत्र के लिए अनुरोध नहीं कर सकता: SSL_connect = 1 अशुद्ध = 0 स्थिति = SSLv3 सर्वर प्रमाणपत्र B पढ़ें: प्रमाणपत्र सत्यापित विफल रहा: [CRL अभी तक / CN = Puppet CA: foreman.company.com के लिए मान्य नहीं है। बाहर निकल रहा है, प्रमाणपत्र प्राप्त करने में विफल रहा है और प्रतीक्षा-अक्षमता अक्षम है
Itai Ganot

@ इताईगनोत ओके। / var / lib / कठपुतली / ssl हटाया गया। पुपेटमास्टर से प्रमाणित हटाया गया। क्या आप जाँच सकते हैं कि क्या एजेंट सही कठपुतली से जुड़ता है?
०३०

यह करता है: [root @ grb16 ~] # grep सर्वर /etc/puppet/puppet.conf सर्वर = foreman.company.com
इटाई गनोट

1
आप ही है वह आदमी! मूर्खतापूर्ण मुझे, मशीन के समयक्षेत्र को संपादित करना भूल गया। आपका बहुत बहुत धन्यवाद!
इटाई गनोट

1
मुझे यह समस्या भी हुई। यह बताता है कि मुझे अपने नोड पर ntp को पुनः आरंभ करने की आवश्यकता है:systemctl restart ntpd
लाल क्रिकेट

2

उसी मुद्दे में भाग गया।

हमारा कठपुतली सेटअप GitHub का उपयोग करके नियंत्रित संस्करण है, इसलिए हर बार जब हम एक नए कठपुतली का प्रावधान करते हैं, तो हम प्रमाणित मुद्दों में भाग लेते हैं। आम तौर पर puppet ca --clean --allकाम करता है, लेकिन हमने निम्नलिखित अधिक विश्वसनीय पाया है:

rm -rf $(puppet master --configprint ssldir)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.