sslエラーのため、新しいサーバーはPuppetmasterから設定を取得できません


14

実稼働環境の3台のマシンにハードウェアの問題があり、廃止されました。インフラストラクチャチームはそれらを再インストールし、同じホスト名と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を2回目に実行すると、次の結果になります。

[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に関連しているようです。おそらく、これらのパッケージの1つが正しくインストールされていないか、再インストールされたノードに間違ったバージョンがインストールされています。

傀儡

[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は、再インストールされた他の2台のサーバーでは実行されていないことに注意してください。この問題の原因と解決方法は?


1
えー 証明書を取り消しましたが、CRLはまだ更新されていません。新しい証明書も発行しましたか?
鹿ハンター14

プロセスを正しく理解している場合puppet agent -t、クライアントで最初に実行するときに証明書を作成し、承認のためにそれをパペットマスターに送信するので、それが新しい証明書を発行する正しい方法であれば、私はしました。
イタイガノ14

@ItaiGanot確かに、ただしエージェントの/ var / lib / puppet / sslにある古いまたは古い証明書が競合している場合があります
030 14

同じエラーメッセージに遭遇しました。もう1つ確認するのは、2番目の要求がノードと同じfqdnを示しているかどうかです。リクエストがパペットマスターのfqdnを示していること。
ゲスト

回答:


20

簡潔な答え

この問題CRL is not yet valid for、Puppet-agentと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クラスのスニペットが含まれています

issuer =(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が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-agentとPuppetmasterの間で時刻を同期します。NTPサーバーは両方のノードで(正常に)動作しますか?
  2. 完全なsslフォルダー(/ var / lib / puppet / ssl)をエージェントから削除するか、名前を変更します。
  3. 発行してマスターから証明書を取り消します sudo puppet cert clean <fqdn-puppet-agent>
  4. 自動署名が無効になっている場合、証明書に署名する
  5. エージェントでパペットを実行する

結論として、Puppet-agentsとPuppetmasterの時刻は常に同期する必要があります。最大許容偏差5分を超えると、問題が発生します。


「[root @ grb16〜]#puppet agent -t情報:grb16.company.comの証明書をキャッシュしています。情報:caのcertificate_revocation_listをキャッシュしています。エラー:証明書を要求できませんでした:SSL_connect返された= 1 errno = 0 state = SSLv3サーバー証明書Bの読み取り:証明書の検証に失敗しました:[CCNはまだ有効ではありません/ CN = Puppet CA:foreman.company.com]終了;証明書の取得に失敗し、waitforcertが無効になっています
Itai Ganot 14

@ItaiGanot OK。/ var / lib / puppet / sslが削除されました。CupはPuppetmasterから削除されました。エージェントが適切な操り人形師に接続しているかどうかを確認できますか?
030 14

[root @ grb16〜]#grep server /etc/puppet/puppet.conf server = foreman.company.com
Itai Ganot 14

1
あなたは男だ!愚かな私は、マシンのタイムゾーンを編集するのを忘れていました。どうもありがとう!
イタイガノ14

1
私もこの問題を抱えていました。私のノードでntpを再起動する必要があることがわかりました:systemctl restart ntpd
レッドクリケット

2

同じ問題に遭遇しました。

人形のセットアップはGitHubを使用してバージョン管理されているため、新しい人形マスターをプロビジョニングするたびに、証明書の問題が発生します。通常はpuppet ca --clean --all機能しますが、次の方が信頼性が高いことがわかりました。

rm -rf $(puppet master --configprint ssldir)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.