Certificados SSL – Gerando arquivo p12 usando openssl

Resumo

Certificados SSL estão em nossos cotidianos. A forma mais comum de manipulá-los é com o trio chave privada, certificado assinado, cadeia de certificado da CA. Para simplificar, diversos sistemas preferem trabalhar com arquivos pkcs12 (.p12). Esse artigo mostra como gerar esses arquivos a partir do trio citado.

Requisitos

Cenário usado

Para validar esse documento usei

Usando openssl para gerar arquivo .p12

Nesse exemplo usei certificado fornecido pelo Let's Encrypt via certbot. Após uma solicitação bem sucedida do certificado, os arquivos ficam armazenados em /etc/letsencrypt/live/.

Caso use certificado obtido por outra Autoridade Certificadora, a ideia continua a mesma. Basta ter a chave gerada no momento da requisição (privkey.pem), o arquivo com o seu certificado assinado pela CA (cert.pem) e a cadeia de certificados intermediários da CA (chain.pem).

Obs: No diretório letsencrypt existem dois arquivos. chain e fullchain. Necessário usar o primeiro uma vez que o segundo possui, também, o certificado do servidor que está no cert.pem

Para gerar um arquivo p12

$ openssl pkcs12 -export -out certificado.p12 -inkey privkey1.pem -in cert1.pem -certfile chain1.pem

Para gerar um arquivo p12 compatível com openssl 1.1.1

Houve uma atualização no formado do arquivo p12 da versão do openssl 1.1.1 para a versão do openssl 3. Caso use o openssl 3 para gerar o arquivo .p12 para ser usado em ambientes legados que ainda fazem uso do algoritmo antigo (ex. appliance checkpoint em 2023 ou oracle JRE < 8u301), basta adicionar o parâmetro -legacy.

$ openssl pkcs12 -export -out certificado.p12 -inkey privkey1.pem -in cert1.pem -certfile chain1.pem -legacy

Para gerar um arquivo p12 compatível com Windows

Windows definitivamente não é meu forte. Posso estar falando besteira aqui. Mas pelo que entendi o Windows usa um algoritmo de cifragem específico. Para garantir que o openssl não use um algoritmo diferente, temos que foçá-lo a usar o PBE-SHA1-3DES para gerar um p12 compatível com servidores Windows.

$ openssl pkcs12 -export -certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -nomac -out certificado.p12 -inkey privkey1.pem -in cert1.pem -certfile chain1.pem

Referências

https://www.openssl.org/docs/man1.1.1/man1/pkcs12.html https://www.misterpki.com/openssl-pkcs12-legacy/ https://learn.microsoft.com/en-us/answers/questions/995232/password-incorrect-when-import-certificate-on-serv?orderby=helpful