En uno de nuestros nodos, tenemos el siguiente mensaje:
err: Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [certificate signature failure for /CN=] notice: Using cached catalog err: Could not retrieve catalog; skipping run err: Could not send report: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [certificate signature failure for /CN=
CASO 1: El certificado erróneo es el del cliente:
En el cliente
Parar el servicio puppet:
service puppet stop
Los certificados, en el nodo, se pueden borrar
find /var/lib/puppet/ssl -name '*.pem' -exec rm {} \;
Antes del siguiente inicio de servicio en puppet, hay que borrar en el servidor su certificado
En servidor:
puppet cert clean node service puppetmaster restart service apache2 restart
CASO 2: El problema está en el certificado del servidor.
Desde el cliente, vamos a hacer una prueba de conexión SSL:
wget https://puppetserver:8140/ --no-proxy --2014-12-17 12:38:53-- https://mypuppetserver.com:8140/ Resolviendo mypuppetserver.com (mypuppetserver.com)... 10.57.236.13 Conectando con mypuppetserver.com (mypuppetserver.com)[10.57.236.13]:8140... conectado. ERROR: El certificado de âmypuppetserver.comâ ERROR: El certificado de âmypuppetserver.comâ
En el servidor, buscamos qué certificado está usando el servidor apache, para las conexiones por el puerto 8140
grep .pem /etc/apache2/sites-enabled/puppetmaster SSLCertificateFile /var/lib/puppet/ssl/certs/mypuppetserver.com.pem SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/mypuppetserver.com.pem SSLCertificateChainFile /var/lib/puppet/ssl/certs/ca.pem SSLCACertificateFile /var/lib/puppet/ssl/certs/ca.pem SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem
Para ver el contenido en texto de cada uno de los certificados
openssl x509 -text -noout -in /var/lib/puppet/ssl/certs/mypuppetserver.com.pem
En nuestro caso, el problema es que los clientes, quieren que el certificado también esté disponible para el CN=puppet. En el certificado anterior, no estaba de nombre alternativo puppet.
Lo hemos resuelto cambiando el /etc/hosts en servidor, ligando también el nombre puppet a nuestro servidor, y recreando los certificados.
Aunque estamos seguros de que hay mejores formas de regenerar los certificados, tras 1 semana de depuración, los hemos regenerado purgando todos los paquetes de puppet y reinstalando el servidor:
cp -rfp /etc/puppet ~/puppet$(date -I) apt-get purge puppetmaster puppetmaster-common puppetmaster-passenger apt-get puppetmaster-passenger apt-get purge puppetmaster