Eu tenho um arquivo PKCS12 contendo a cadeia de certificados completa e a chave privada. Eu preciso dividi-lo em 3 arquivos para um aplicativo. Os 3 arquivos que eu preciso são os seguintes (no formato PEM):
- um arquivo de chave não criptografado
- um arquivo de certificado de cliente
- um arquivo de certificado de autoridade de certificação (raiz e todos os intermediários)
Esta é uma tarefa comum que tenho que executar, por isso estou procurando uma maneira de fazer isso sem qualquer edição manual da saída.
Eu tentei o seguinte:
openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain -out <cacerts.cer>
Isso funciona bem, no entanto, a saída contém atributos de bolsa, que o aplicativo não sabe como manipular.
Após algumas pesquisas, encontrei uma solução sugerida de passar os resultados por x509 para remover os atributos do pacote.
openssl x509 -in <clientcert.cer> -out <clientcert.cer>
Isso funciona, mas me deparo com um problema no arquivo cacert. O arquivo de saída contém apenas um dos 3 certs da cadeia.
Existe uma maneira de evitar incluir os atributos de saqueta na saída do comando pkcs12 ou uma maneira de ter a saída do comando x509 incluindo todos os certificados? Além disso, se executá-lo através de x509 é a solução mais simples, existe uma maneira de canalizar a saída de pkcs12 para x509 em vez de escrever o arquivo duas vezes?