Hello,
I've configured my puppetserver with an External CA
<https://docs.puppet.com/puppetserver/latest/external_ca_configuration.html>,
and everything was working as expected off the bat, but when I add the CRL
path, puppet agent runs on all hosts stops running. webserver.conf looks
like this:
webserver: {
> access-log-config: /etc/puppetlabs/puppetserver/request-logging.xml
> client-auth: want
> ssl-host: 0.0.0.0
> ssl-port: 8140
> ssl-cert: /etc/puppetlabs/puppet/ssl/certs/<hostname>
> ssl-key: /etc/puppetlabs/puppet/ssl/private_keys/<hostname>
> ssl-ca-cert: /etc/puppetlabs/puppet/ssl/ca/ca.crt
> ssl-cert-chain: /etc/puppetlabs/puppet/ssl/ca/ca_chain.pem
> ssl-crl-path: /etc/puppetlabs/puppet/ssl/ca/ca_crl.pem
> }
At first there were not any errors appearing in the puppetserver logs, but
after changing the logback log level to DEBUG, I finally saw found errors
in the puppetserver.log file:
2017-03-21 16:28:11,652 DEBUG [qtp1057116152-68] [o.e.j.s.HttpConnection]
> javax.net.ssl.SSLHandshakeException: General SSLEngine problem
> at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478)
> at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535)
> at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:813)
> at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
> at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
> at
> org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.fill(SslConnection.java:516)
> at
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:239)
> at
> org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
> at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
> at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728)
> at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:304)
> at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
> at
> sun.security.ssl.ServerHandshaker.clientCertificate(ServerHandshaker.java:1906)
> at
> sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:233)
> at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026)
> at sun.security.ssl.Handshaker$1.run(Handshaker.java:966)
> at sun.security.ssl.Handshaker$1.run(Handshaker.java:963)
> at java.security.AccessController.doPrivileged(Native Method)
> at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1416)
> at
> org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.fill(SslConnection.java:612)
> ... 5 common frames omitted
> Caused by: sun.security.validator.ValidatorException: PKIX path validation
> failed: java.security.cert.CertPathValidatorException: Could not determine
> revocation status
> at sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:352)
> at
> sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:249)
> at sun.security.validator.Validator.validate(Validator.java:260)
> at
> sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
> at
> sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:279)
> at
> sun.security.ssl.X509TrustManagerImpl.checkClientTrusted(X509TrustManagerImpl.java:130)
> at
> sun.security.ssl.ServerHandshaker.clientCertificate(ServerHandshaker.java:1893)
> ... 12 common frames omitted
> Caused by: java.security.cert.CertPathValidatorException: Could not
> determine revocation status
> at
> sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:135)
> at
> sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:219)
> at
> sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:140)
> at
> sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:79)
> at
> java.security.cert.CertPathValidator.validate(CertPathValidator.java:292)
> at sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:347)
> ... 18 common frames omitted
> Caused by: java.security.cert.CertPathValidatorException: Could not
> determine revocation status
> at
> sun.security.provider.certpath.RevocationChecker.buildToNewKey(RevocationChecker.java:1092)
> at
> sun.security.provider.certpath.RevocationChecker.verifyWithSeparateSigningKey(RevocationChecker.java:910)
> at
> sun.security.provider.certpath.RevocationChecker.checkCRLs(RevocationChecker.java:577)
> at
> sun.security.provider.certpath.RevocationChecker.checkCRLs(RevocationChecker.java:465)
> at
> sun.security.provider.certpath.RevocationChecker.check(RevocationChecker.java:367)
> at
> sun.security.provider.certpath.RevocationChecker.check(RevocationChecker.java:337)
> at
> sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:125)
> ... 23 common frames omitted
Testing the CRL using openssl works as expected, after concatenating the CA
crt and the CRL crt, and running the openssl command below verifies the
cert hasn't been revoked.
$ openssl verify -crl_check -CAfile crl_ca.pem
> /etc/puppetlabs/puppet/ssl/certs/<hostname>.pem
> /etc/puppetlabs/puppet/ssl/certs/<hostname>.pem: OK
OpenSSL also verifies that certs have been revoked as well:
$ openssl verify -crl_check -CAfile crl_chain3.pem <revoked cert>.pem
> <revoked cert>.pem: O = <domain>, CN = <hostname>
> error 23 at 0 depth lookup:certificate revoked
Are there any additional setting needed to get Java working to honor the
CRL? Is there any resource for better logging to be able to narrow down the
issue? Is using a CRL with an external CA still supported in puppetserver,
or should I avoid using a CRL and use OCSP instead?
Any help or advice would be hugely appreciated.
Thanks a lot.
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/41dc58ec-a3b9-4eb8-9f83-ca3242a8013f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.