Exportar os certificados de um P12 sem a chave privada
Um pacote PKCS12 contém chaves e certificados juntos. Leia a estrutura primeiro e depois selecione os certificados com -nokeys em vez de remover a proteção.
O ticket de suporte pergunta qual certificado está dentro do pacote VPN, e o primeiro impulso é exportar tudo e anexar. Um arquivo P12 empacota certificados e material de chave privada em um único contêiner, então exportar tudo é exatamente o que você não deve enviar. O comando que responde à pergunta é um problema de seleção, não de conversão. Quatro opções decidem qual metade do contêiner você obtém, e duas delas parecem mais seguras do que são.
Comece lendo o contêiner em vez de esvaziá-lo.
O que um arquivo PKCS12 realmente carrega
Um contêiner PKCS12 contém um ou mais certificados, possivelmente uma chave privada e um código de autenticação de mensagem sobre o conteúdo. Os certificados podem incluir o certificado folha da sua identidade de cliente e os intermediários que o encadeiam a uma CA. A chave, quando presente, é o que torna o arquivo um segredo em vez de um documento.
Essa distinção é o motivo pelo qual -nokeys existe e por que é a opção de que esta tarefa precisa.
Ler o pacote sem gravar a chave
A forma de inspeção imprime a estrutura e os detalhes dos algoritmos e não grava nada: openssl pkcs12 -in client.p12 -info -noout. Ela pede a senha de importação, que é o lugar certo para esse valor, e informa se o arquivo carrega uma chave. Use -passin env:PKCS12_PASS quando a senha não puder ser digitada, porque uma senha dentro de um comando shell é uma senha na lista de processos. Esta etapa não exporta nada, que é justamente o ponto.
Leia a saída para três coisas: quantos certificados, se há uma chave presente e quais algoritmos a protegem.
Use -nokeys e não o confunda com -nocerts
-nokeys exclui as chaves privadas e deixa os certificados. -clcerts restringe isso aos certificados de cliente, -cacerts restringe aos certificados de CA, e esses dois são filtros, não alternativas. -nocerts parece a grafia segura da mesma ideia e significa o oposto: sem certificados, o que deixa apenas chaves. Misturá-lo em uma exportação de certificados é assim que uma chave privada acaba no disco.
A forma de duas linhas que produz um arquivo de certificados e um arquivo de CA, e nada mais, é:
openssl pkcs12 -in client.p12 -nokeys -clcerts -out client-certificates.pem
openssl pkcs12 -in client.p12 -nokeys -cacerts -out ca-certificates.pemPacotes legados precisam de -legacy no OpenSSL 3 para ler sua criptografia mais antiga, e essa opção muda o que o analisador aceita, não o que ele emite. Se a análise falhar com um erro de algoritmo não suportado, adicionar -legacy é o primeiro movimento correto e pular a verificação do MAC não é.
Verifique a saída, não o código de retorno
Um status de saída zero diz que o comando rodou, não que o arquivo contém o que você espera. Conte os certificados na saída e leia o assunto e as datas: openssl x509 -in client-certificates.pem -noout -subject -dates -fingerprint. Compare a impressão digital com a que a equipe de suporte espera, porque um pacote com dois certificados de cliente produz um arquivo com dois blocos e a maioria das ferramentas lê apenas o primeiro. Propósito, confiança e correspondência de chave são, de novo, testes separados.
Um certificado que é analisado é um certificado que é analisado. Não é um certificado que a VPN aceita.
Decida se você precisa de arquivos
Se o cliente receptor importa PKCS12 diretamente, enviar o pacote original por um canal aprovado com a senha mantida separada é mais simples e preserva a proteção. A extração serve para inspeção, para um cliente que precisa de PEM ou para um caso de suporte que pediu um artefato específico. Cada extração remove uma camada e deve ter um motivo.
Certificados públicos não contêm a chave privada, mas contêm nomes e detalhes da organização. Compartilhe os campos que o ticket pediu em vez do arquivo, a menos que o arquivo tenha sido o pedido.