Eu tenho um arquivo PKCS12 que contém a cadeia completa de certificados e a chave privada. Preciso dividi-lo em três arquivos para um aplicativo. Os 3 arquivos necessários são os seguintes (no formato PEM):
- um arquivo de chave não criptografado
- um arquivo de certificado do cliente
- um arquivo de certificado da CA (raiz e todos os intermediários)
Essa é uma tarefa comum que tenho que executar, por isso estou procurando uma maneira de fazer isso sem nenhuma 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, com os quais o aplicativo não sabe como lidar.
Após algumas pesquisas, encontrei uma solução sugerida para passar os resultados pelo x509 para remover os atributos da bolsa.
openssl x509 -in <clientcert.cer> -out <clientcert.cer>
Isso funciona, mas eu encontro um problema no arquivo cacert. O arquivo de saída contém apenas um dos três certificados na cadeia.
Existe uma maneira de evitar a inclusão dos atributos bag na saída do comando pkcs12 ou uma maneira de fazer com que a saída do comando x509 inclua todos os certificados? Além disso, se executá-lo no x509 for a solução mais simples, existe uma maneira de canalizar a saída do pkcs12 para o x509 em vez de gravar o arquivo duas vezes?