Certificados SSL e chaves privadas podem ser armazenados em vários formatos de arquivo. O conteúdo é o mesmo — é a codificação e o empacotamento que diferem. A maior confusão vem de precisar de um formato específico para seu servidor.
Comparação de formatos
| Formato | Extensão | Codificação | Contém | Usado por |
|---|---|---|---|---|
| PEM | .pem, .crt, .cer, .key | Base64 (texto) | Certificado, chave ou cadeia (um por arquivo) | Nginx, Apache, maioria dos servidores Linux |
| DER | .der, .cer | Binário | Certificado ou chave único | Java, alguns aplicativos Windows |
| PFX/PKCS#12 | .pfx, .p12 | Binário | Certificado + chave + cadeia em um arquivo | Windows IIS, Azure, macOS Keychain |
PEM — o formato mais comum
PEM (Privacy Enhanced Mail) é texto codificado em base64. Você pode abri-lo em um editor de texto:
-----BEGIN CERTIFICATE-----
MIIFYjCCBEqgAwIBAgISA8ht...
(dados codificados em base64)
-----END CERTIFICATE-----
Arquivos PEM podem conter certificados, chaves privadas ou cadeias de certificados. O cabeçalho indica o que está dentro:
BEGIN CERTIFICATE— um certificadoBEGIN PRIVATE KEY— uma chave privada (ouBEGIN RSA PRIVATE KEY/BEGIN EC PRIVATE KEY)BEGIN CERTIFICATE REQUEST— um CSR
O GetHTTPS gera no formato PEM — privkey.pem, cert.pem, chain.pem, fullchain.pem.
DER — codificação binária
DER é a forma binária dos mesmos dados que o PEM codifica como texto. Não é legível por humanos. Usado principalmente por aplicativos Java (keytool) e alguns componentes Windows.
PFX/PKCS#12 — formato empacotado
PFX (Personal Information Exchange) empacota o certificado, chave privada e cadeia em um único arquivo protegido por senha. Windows IIS, Azure App Service e macOS Keychain exigem este formato.
Convertendo entre formatos
Todas as conversões usam OpenSSL:
PEM → PFX
openssl pkcs12 -export \
-out certificate.pfx \
-inkey privkey.pem \
-in cert.pem \
-certfile chain.pem
Você será solicitado a definir uma senha de exportação.
PFX → PEM
# Extrair certificado
openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out cert.pem
# Extrair chave privada
openssl pkcs12 -in certificate.pfx -nocerts -nodes -out privkey.pem
# Extrair cadeia
openssl pkcs12 -in certificate.pfx -cacerts -nokeys -out chain.pem
PEM → DER
openssl x509 -in cert.pem -outform DER -out cert.der
DER → PEM
openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem
Qual formato eu preciso?
| Servidor/Plataforma | Formato | Arquivos necessários |
|---|---|---|
| Nginx | PEM | fullchain.pem + privkey.pem |
| Apache | PEM | cert.pem + chain.pem + privkey.pem |
| IIS (Windows) | PFX | certificate.pfx (converter de PEM) |
| Azure App Service | PFX | certificate.pfx |
| AWS (ACM) | PEM | cert.pem + chain.pem + privkey.pem (colar no console) |
| Java (Tomcat) | JKS ou PFX | Converter PEM → PFX → JKS com keytool |
| Node.js | PEM | Ler arquivos diretamente no código |
Como identificar o formato de um arquivo
Não tem certeza do formato de um arquivo? Verifique:
# Se começa com "-----BEGIN" — é PEM (texto base64)
head -1 mystery-file.pem
# Se é binário (texto ilegível) — é DER ou PFX
file mystery-file.cer
# Saída como "data" ou "certificate" = DER
# Saída como "PKCS12" = PFX
# Inspecionar um certificado PEM
openssl x509 -in cert.pem -noout -text
# Inspecionar um certificado DER
openssl x509 -in cert.der -inform DER -noout -text
# Inspecionar um arquivo PFX
openssl pkcs12 -in cert.pfx -info -nokeys
Confusão comum com extensões de arquivo
| Extensão | Geralmente significa | Mas pode ser |
|---|---|---|
.pem | PEM (base64) | Sempre PEM |
.crt | Certificado PEM | DER no Windows |
.cer | Certificado PEM | DER no Windows |
.key | Chave privada PEM | DER (raro) |
.pfx | Pacote PKCS#12 | Sempre PFX |
.p12 | Pacote PKCS#12 | Sempre PFX (mesmo que .pfx) |
.der | DER (binário) | Sempre DER |
.jks | Java KeyStore | Sempre JKS |
Regra prática: Abra o arquivo em um editor de texto. Se você vir -----BEGIN CERTIFICATE-----, é PEM independentemente da extensão. Se vir dados binários ilegíveis, é DER ou PFX.
Perguntas frequentes
Qual a diferença entre .crt, .cer e .pem?
Todos podem ser formato PEM. A extensão é uma convenção de nomenclatura, não um indicador de formato. .crt e .cer são comumente usados para arquivos de certificado, .pem para qualquer arquivo codificado em PEM. No Windows, arquivos .cer às vezes são codificados em DER — abra em um editor de texto para verificar.
Por que o GetHTTPS me dá 4 arquivos?
Máxima compatibilidade. O GetHTTPS fornece: privkey.pem (chave privada), cert.pem (apenas seu certificado), chain.pem (certificado da CA intermediária), fullchain.pem (certificado + cadeia combinados). O Nginx precisa de fullchain.pem; o Apache precisa de cert.pem + chain.pem separados; o IIS precisa de PFX (converter de PEM).
Como crio um PFX para Windows/IIS?
Use o comando OpenSSL PEM → PFX acima. Você precisará de privkey.pem, cert.pem e chain.pem do GetHTTPS. O .pfx resultante pode ser importado no IIS, Azure App Service ou macOS Keychain.
Posso converter de um formato para outro sem a chave privada?
Você pode converter o certificado entre PEM e DER sem a chave privada. Mas criar um PFX requer a chave privada (ele empacota certificado + chave juntos). Se você perdeu sua chave privada, precisa gerar um novo certificado.
Qual formato a Let’s Encrypt usa?
A Let’s Encrypt (via qualquer cliente ACME incluindo GetHTTPS) gera no formato PEM. Se você precisa de um formato diferente para seu servidor, converta usando os comandos OpenSSL acima.