Por Davi Netto em 09-08-2021
Dúvidas comuns sobre extensões de certificados SSL
Um ponto de grande confusão dos certificados SSL sem dúvida são os vários formatos em que ele estão disponíveis. Iniciando pelo basico, saiba que todos os certificados SSL são certificados x.509. Esse é o formato padrão da estrutura de uma chave pública. No entanto, grande parte das dúvidas está relacionada à extensão dos arquivos e compatibilidade com sistemas.
Certificados SSL podem ser emitidos utilizando diferentes algoritmos de codificação (encoding) estando disponíveis nas extensões CER, CRT, DER, PEM, P7B, P7S, PFX, e P12.
É importante considerar que:
- Autoridades de Certificação (CA) emitem certificados em formatos diferentes;
- Servidores diferentes aceitam diferentes tipos de certificados.
Caso você possua um certificado em uma extensão diferente da requerida pelo seu servidor, é necessário converter o certificado SSL para o formato desejado. Por exemplo: Se você possuir um certificado em PKCS7 mas o servidor aceita apenas PEM, você precisa convertê-lo antes de usá-lo.
Para facilitar, vamos entender um pouco melhor sobre os tipos mais comuns de certificados.
PEM
PEM (Privacy-enhanced Mail) é o formato de certificado mais emitido pelas autoridades de certificação (CA). Arquivos PEM possuem encoding em ASCII BASE64 e podem ser vistos em vários formatos como .pem
, .crt
, .cer
, ou .key
. São amplamente usados em servidores usando OpenSSL, como Apache e NGINX.
Este certificado é caracterizado por dizeres —- BEGIN CERTIFICATE—-
e —-END CERTIFICATE—-
. Por exemplo:
Chave Privada: Contido entre —- BEGIN RSA PRIVATE KEY—–
e —–END RSA PRIVATE KEY—–
.
CSR: Contido entre —–BEGIN CERTIFICATE REQUEST—–
e —–END CERTIFICATE REQUEST—–
.
P7B/PKCS#7
Certificados P7B/PKCS#7 utilizam encoding em ASCII BASE64 e são vistos nos formatos .p7b
ou .p7c
. As plataformas mais comuns desse tipo de certificado são Microsoft Windows e Java Tomcat.
Estes arquivos são caracterizados pelos dizeres “—–BEGIN PKCS7—–” e “—–END PKCS7—–”.
DER
DER é um acrônimo para “distinguished encoding rules” e é uma forma binária de certificados PEM. Este formato é aplicável tanto para certificados e chaves privadas e utilizado majoritariamente das extensões .cer
e .der
. É muito comum em plataformas Java.
PFX/P12/PKCS#12
O formato PFX/P12/PKCS#12 possuem normalmente a extensão .pfx
ou .p12
. São tipicamente usados em Windows.
Como converter certificados SSL?
A forma mais fácil de converter um certificado SSL é utilizando uma ferramenta online mas isso pode expor o seu certificado a terceiros. A forma mais segura, no entanto, é utilizar o software gratuito Open SSL e realizar as conversões direto em seu computador. Abaixo, listamos os principais comandos de conversão:
Converter X.509 para PEM
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
Converter DER para PEM (Binário para Base64 ASCII)
openssl x509 -inform der -in certificatename.der -out certificatename.pem
Converter PEM para DER (Base64 ASCII para Binário)
openssl x509 -inform der -in certificatename.der -out certificatename.pem
Converter PEM para PKCS#7 (.p7b não inclui a chave privada)
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
Converter PKCS#7 para PEM
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
Converter PKCS#12 para PEM (PKCS#12 é protegido por senha)
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
Converter PKCS7 para PKCS12
Essa conversão requer 2 etapas. Primeiro você converte o arquivo P7B
em CER
e depois combina o arquivo CER
e a chave privada em um arquivo PFX
.
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer