root@testpgmaster:/# puppetd --test
info: Creating a new SSL key for testpgmaster
warning: peer certificate won't be verified in this SSL session
info: Caching certificate for ca
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
info: Creating a new SSL certificate request for testpgmaster
info: Certificate Request fingerprint (md5): C9:83:59:EF:6A:B8:16:31:B6:92:5D:70:F1:67:39:4F
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
Exiting; no certificate found and waitforcert is disabled
root@testpgmaster:/#
Esta é uma saída normal e o resultado é, conforme esperado, a criação adequada da solicitação de certificado. O problema é que quase toda vez que o aviso é mostrado, há um atraso de cerca de dois minutos.
Ao executar o mesmo comando com o strace, então, na saída de strings caóticas, eu tenho, em algum lugar:
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 6
fcntl(6, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK) = 0
connect(6, {sa_family=AF_INET, sin_port=htons(8140), sin_addr=inet_addr("10.0.2.15")}, 16) = -1 EINPROGRESS (Operation now in progress)
...
[lots of intermediate output]
...
select(7, [6], [], [], {119, 999900}) <- The pause occurs here
AFAIU, isso significa que ele bloqueia enquanto espera que o mestre de marionetes responda a algo.
O puppetmaster corre o passageiro no apache2, escutando na porta 8140. Ele também tem um firewall, mas a porta 8140 permite o agente. Na verdade, o agente é um contêiner openvz rodando dentro da máquina que atua como mestre; o contêiner usa NAT e o host faz o encaminhamento; certamente poderia haver um problema com a configuração de tudo isso, mas o problema ocorre apenas quando a mensagem "warning: peer certificate não será verificada nesta sessão SSL"; em todos os outros casos, tudo corre sem problema.