El certificado del agente de títeres verifica la falla

10

Tengo configurado un Puppet Master / Agent, y he firmado con éxito el certificado del agente en el master. Sin embargo, cuando corro puppet agent --testme sale un error que se ve así:

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: [certificate signature failure for /CN=hostname.domain.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: [certificate signature failure for /CN=hostname.domain.com]  
Error: /File[/var/lib/puppet/lib]: Could not evaluate: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [certificate signature failure for /CN=hostname.domain.com] Could not retrieve file metadata for puppet://hostname.domain.com/plugins: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed: [certificate signature failure for /CN=hostname.domain.com]  
Error: 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=hostname.domain.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: [certificate signature failure for /CN=hostname.domain.com]  

el hostname.domain.comes el maestro

¿Cómo puedo solucionar esto? Me aseguré de que ambos relojes estén en el momento correcto en la misma zona horaria, eliminé todo en el /var/lib/puppet/ssldirectorio de agentes y renuncié, no sé qué más hacer.

John Smith
fuente
¿Parece que su maestro está usando un certificado diferente al que confía su cliente? ¿Ha cambiado el certificado de maestría?
Shane Madden
@ShaneMadden No lo creo ... ¿debo limpiar y revocar los certificados de maestros y clientes? No me he metido con los certificados maestros en absoluto, pero así es como se ve la salida de "lista de certificados de títeres --todos": + "masterhost.domain.com" (SHA1) E1: F7: 6A: 21: CB: CD: xx: xx: xx: xx ... + "agenthost.domain.com" (SHA256) 5A: D9: 7B: 96: 0B: FF: E4: 87: 58: AF: 00: xx: xx: xx : xx ..
John Smith
Y ese masterhost.domain.comes el mismo que hostname.domain.comen su pregunta, ¿verdad? Probemos esto, veremos si los certificados se verifican manualmente; ejecutar openssl s_client -connect masterhost.domain.com:8140 -showcertsy copiar los datos del certificado (comienza con -----BEGIN CERTIFICATE-----, incluir esa línea y la línea final del certificado) en un nuevo archivo, luego ejecutar openssl verify -CAfile /var/lib/puppet/ssl/certs/ca.pem /path/to/file/from/last/commandy ver si se verifica.
Shane Madden
@ShaneMadden Parece que algo anda mal ... Cuando ejecuté el comando "-showcerts", me dio dos certificados de "inicio" y "finalización", así que intenté agregar uno de ellos a un nuevo archivo y obtuve esto: / var / lib / puppet / ssl / ca / ​​test: /CN=masterhost.domain.com error 7 a 0 profundidad de búsqueda: error de firma del certificado 22297: error: 0407006A: rutinas rsa: RSA_padding_check_PKCS1_type_1: el tipo de bloque no es 01: rsa_pk1.c: 100: 22297: error: 04067072: rutinas de RSA: RSA_EAY_PUBLIC_DECRYPT: comprobación de relleno fallado: rsa_eay.c: 697: 22297: error: 0D0C5006: ASN1 codificación de rutinas: ASN1_item_verify: EVP lib: a_verify.c: 173:
John Smith
Eso es extraño. Parece que está enviando el certificado raíz además del certificado del servidor en la conexión, así que tal vez solo compare el contenido del segundo certificado -showcertscon el contenido de /var/lib/puppet/ssl/certs/ca.pem- ¿deberían ser idénticos?
Shane Madden

Respuestas:

13

Vuelva a crear la configuración completa del certificado del cliente. Esto siempre ha solucionado cualquier problema de certificación que hayamos experimentado en el pasado. La siguiente instrucción asume que el nombre de host de su agente es agenthost.hostname.com

En el cliente, elimine todos los certificados almacenados, incluida la CA:

find /var/lib/puppet/ssl -name '*.pem' -delete

En el maestro, elimine cualquier CSR pendiente o certificado de cliente antiguo para este cliente:

find /var/lib/puppet/ssl -name agenthost.domain.com.pem -delete

Luego, en el cliente, vuelva a conectarse al maestro y envíe una CSR:

puppet agent -t --waitforcert=60

y cuando está esperando (si no ha configurado la firma automática habilitada), en el maestro apruebe la CSR para que se envíe un nuevo certificado de cliente:

puppet cert sign agenthost.domain.com

Esto debería hacer que el agente vuelva a descargar los certificados de la marioneta CA y vuelva a solicitar su propio certificado.

Tuvimos que usar este procedimiento en el pasado cuando cambiamos los servidores de títeres y los certificados de CA cambiaron, o cuando reconstruimos un host con el mismo nombre de host.

Asegúrese de que su agente conozca su verdadero nombre de host totalmente calificado; use el comando 'hostname' para asegurarse de que es lo que espera que sea.

Steve Shipway
fuente
3
En Master, puppet cert clean ‘agentName’funciona para mí. RHEL Títeres Empresa SSL ubicación: /etc/puppetlabs/puppet/ssl. Y he sincronizado el tiempo entre Master y Agent.
Ivan Chau
Puppet Enterprise y el nuevo Puppet 4 almacenan sus certificados en / etc / puppetlabs / puppet / ssl, como se mencionó anteriormente. La ubicación / var / lib / puppet / ssl es para las ediciones de la comunidad Puppet 2.xy 3.x.
Steve Shipway
6

Tengo un problema similar. He creado un entorno vagabundo con un puppetmaster y varios clientes. El problema es que cuando destruyo y creo el puppetmaster, los clientes detectan al nuevo puppetmaster como un impostor.

Eliminar /etc/puppet/sslen el cliente resuelve el problema.

Recuerde que su configuración de SSL se almacenará en caché, por lo que es necesario reiniciar el Puppet Master , si decide eliminar también /etc/puppet/sslen ese host:

sudo /etc/init.d/puppetmaster restart
adrianlzt
fuente
service puppetserver restartme lo
arregló