Puppet: Cambiar certificados de cliente puppet o puppetmaster

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

Debian: Instalar ICAClient

Hemos tenido algunos problemas al instalar ICAClient (aka citrix receiver) en una máquina debian.

Primero, hemos tenido que instalar los siguientes paquetes:
Debian wheezy
apt-get install ia32-libs ia32-libs-gtk ffmpeg lib32gcc libmotif4 motif-clients

Debian Jessie

apt-get install multiarch-support ffmpeg lib32gcc libmotif4 motif-clients

También hemos tenido que instalar nspluginwrapper_1.3.0-1, bajándolo directamente de la página de oldstable de debian

Al instalar, nos daba un error en la postinstalación de icaclient:

processing icaclient (--configure): subprocess installed
post-installation script returned error exit status 2

/var/lib/dpkg/info/icaclient.postinst
echo $?

Alrededor de la línea 2649, tal cómo explican en crazymadeagle, hemos tenido que sustituir la segunda línea, por la primera:

echo $Arch|grep -E "i[0-9]86|x86_64" >/dev/null
#echo $Arch|grep "i[0-9]86" >/dev/null

Tras ello, reconfiguramos el paquete con dpkg, y nuestro recién editado script de post-instalación:

dpkg --configure icaclient

Certificados

Con el cliente ya instalado, hemos tenido que editar para meter una nueva entidad certificadora en nuestro sistema. El error de citrix era

The server certificate received is not trusted (SSL Error 61)

Hemos copiado los certificados ya disponibles para firefox en la carpeta donde busca ICAclient, como indican desde el foro de ubuntu:


ln -s /usr/share/ca-certificates/mozilla/* /opt/Citrix/ICAClient/keystore/cacerts/

 

También, en el caso de no estar el certificado de la entidad certificado en nuestro firefox, se puede copiar a mano el certificado .cer o .crt en /opt/Citrix/ICAClient/keystore/cacerts/

Crear certificado de usuario para probar servicios web con ssl

En ocasiones es necesario contar con un certificado de usuario, para poder hacer pruebas sobre un servicio web.

Creación del certificado

Para crear el certificado, en una máquina linux con openssl instalado, creamos el certificado. Por defecto, la clave privada se crea con una clave (passphrase). Dado que es un certificado simplemente para test, vamos a crear también el fichero de clave privada sin passphrase (paso 3)

 

# Creación de clave privada
openssl genrsa -out testing_password.key 4096
# Creación de clave pública
openssl req -new -x509 -days 3000 -key testing_password.key -out testing.crt
# Hacer una copia del fichero de claves sin proteger con contraseña
openssl rsa -in testing_password.key -out testing_nopasswd.key
# Exportar en pkcs12 para poderlo usar con navegadores como firefox
openssl pkcs12 -export -out testing.p12 -inkey testing_password.key -in testing.crt

Ver más información

Uso del certificado

Ahora, para probar el servicio web, podemos importarlo desde un navegador , o ponerlo en línea de comando en wget: wget


wget https://myhost.com/service --no-proxy --no-check-certificate --certificate=testing.csr