Resposta concisa
O problema CRL is not yet valid for
indica que o tempo entre o agente-marionete e o Puppetmaster está fora de sincronia . Sincronize a hora (NTP). Remova o certificado do Puppet-agent e do Puppetmaster também e execute o Puppet no agente.
Resposta abrangente
CRL is not yet valid for
reside no seguinte snippet.
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
assunto
subject do
described_class.new(ssl_configuration,
ssl_host)
end
O código inclui snippets do OpenSSL :: X509: : CRL classe.
emissor = (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;
}
A hora last_updated será a hora atual mais um dia adicional e será passada para a função de assunto que chama a função de chamada que reside no classe de validador_de_valor .
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
Se preverify_ok for false, a cláusula else é aplicável. Como if crl.last_update && crl.last_update < Time.now + FIVE_MINUTES_AS_SECONDS
resulta em false porque o tempo foi stubbed com um dia adicional a declaração else será aplicável. A avaliação de @verify_errors << "#{error_string} for #{crl.issuer}"
resulta em CRL is not yet valid for /CN=Puppet CA: puppetmaster.example.com
.
Para resolver o problema:
- Sincronize o tempo entre o agente-marionete e o mestre-de-marionetes. O servidor NTP é executado (bem) em ambos os nós?
- Remover ou renomear a pasta ssl completa ( / var / lib / puppet / ssl ) do agente.
- Revogar o certificado do mestre emitindo
sudo puppet cert clean <fqdn-puppet-agent>
- Assinar o certificado se o autosign estiver desativado
- Executar marionete no agente
Em conclusão, o tempo em Marionetes e Marionete deve ser sincronizado o tempo todo. Exceder o desvio máximo permitido de 5 minutos causará o problema.