Em primeiro lugar, noto que nos seus fragmentos de shell, seu prompt é um '$'. Sem dúvida, existem configurações de fantoches diferentes das minhas, mas eu precisaria estar executando esses comandos como root. Quase certamente no sistema do cliente, onde você estaria executando o boneco como root. Se você executar o puppetmaster como algo diferente de root, presumivelmente você executaria os comandos puppet CA como aquele usuário.
Em segundo lugar, (e novamente pode haver algo diferente em sua configuração), eu nunca preciso executar comandos openssl diretamente. Eu faço tudo com comandos de fantoche.
O que eu faço é:
Primeiro, verifique se o FQDN do seu cliente está como você deseja, pois isso será usado na nomenclatura do certificado. Verifique com hostname -f
No sistema do cliente (como root):
puppet agent --test
Supondo que a chave já não saia, o texto acima exibirá a impressão digital do certificado, mas se posteriormente você precisar exibi-la, use:
puppet agent --fingerprint --noop
On puppetmaster (como root):
puppet cert list
Verifique a impressão digital e faça:
puppet cert sign [client's fqdn]
Se algo der errado, procure as várias chaves, certificados e pedidos de certificado em / var / lib / puppet / ssl (no cliente) e / var / lib / puppet / ssl / ca (no mestre). Na minha experiência, o layout é auto-explicativo, e é seguro apagar coisas e esperar que elas sejam geradas novamente.
Eu vejo que você está perguntando especificamente sobre a API, mas você realmente precisa acessá-la manualmente? Se fizer isso, siga a receita acima, para gerar certificados, solicitações de certificados, etc. e, em seguida, use os comandos openssl para examinar os arquivos criados nos locais indicados e comparar com o que você está gerando.
Se for preciso dar uma olhada em como o fantoche formata a solicitação da API, o que eu faria é usar o ltrace para capturar os dados transmitidos de / para as chamadas da biblioteca openssl. Alguém mais familiarizado com os fantoches do framework ruby pode escolher inserir algum código de depuração lá. (o ltrace é muito mais seguro em um servidor de produção)