Certificados SSL/TLS: Guia Completo de Geração e Conversão entre Formatos
Índice
Introdução
Certificados SSL/TLS são fundamentais para proteger dados em trânsito na internet. Seja você um administrador de infraestrutura, desenvolvedor ou gestor de TI, é essencial compreender como gerar, converter e gerenciar esses certificados.
Neste guia, você aprenderá:
-
Como gerar certificados Let's Encrypt usando Certbot
-
Os principais formatos de certificado e suas diferenças
-
Como converter certificados entre diversos formatos (.PEM, .PFX, .P12, .DER, .CRT, .KEY)
-
Boas práticas de segurança e armazenamento
-
Soluções para problemas comuns
Este artigo é destinado a profissionais de infraestrutura, DevOps e administradores de sistemas em ambientes corporativos.
O que é um Certificado SSL/TLS?
Um certificado SSL/TLS é um documento digital que:
-
Autentica a identidade de um servidor web
-
Criptografa a comunicação entre cliente e servidor
-
Valida a confiabilidade de um site
Componentes de um Certificado
Um certificado típico contém:
Certificate (Certificado X.509)
├── Domínios autorizados (CN, SAN)
├── Validade (Data de emissão e expiração)
├── Chave Pública
└── Assinatura da Autoridade Certificadora
Private Key (Chave Privada)
└── Deve ser mantida segura em todas as circunstâncias
Chain (Cadeia de Certificados)
└── Certificados intermediários para validação
Por que diferentes formatos?
Diferentes aplicações e plataformas suportam formatos distintos:
-
Servidores web (Nginx, Apache): geralmente usam .PEM
-
Windows/IIS: frequentemente requerem .PFX ou .P12
-
Aplicações Java: podem usar .JKS ou .P12
-
Dispositivos de rede: às vezes usam .DER ou .CRT
Formatos de Certificado Explicados
PEM (Privacy Enhanced Mail)
-
Extensão:
.pem,.crt,.key -
Conteúdo: Texto ASCII com delimitadores
-----BEGIN/END -
Componentes: Suporta chave privada, certificado e cadeia de certificados em arquivos separados ou únicos
-
Usado em: Nginx, Apache, OpenSSL, Linux/Unix
-
Exemplo:
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKZ6gLSQ8Y/sMA0GCSqGSIb3DQEBAQUAD...
-----END CERTIFICATE-----
PFX e P12 (PKCS#12)
-
Extensão:
.pfx,.p12 -
Conteúdo: Binário (formato proprietário)
-
Componentes: Contém certificado, chave privada e cadeia em um único arquivo
-
Proteção: Protegido por senha
-
Usado em: Windows/IIS, algumas aplicações Java, exportação/backup
-
Vantagem: Arquivo único, portátil, protegido por senha
DER (Distinguished Encoding Rules)
-
Extensão:
.der,.cer -
Conteúdo: Binário
-
Componentes: Apenas certificado público (sem chave privada)
-
Usado em: Sistemas que precisam apenas validar certificados
-
Nota: Não recomendado para produção isolado
CRT (Certificate)
-
Extensão:
.crt -
Conteúdo: Pode ser PEM ou DER
-
Nota: Mesma função que .cer; formato varia conforme o sistema
KEY (Private Key)
-
Extensão:
.key -
Conteúdo: Geralmente PEM
-
Nota: Contém apenas a chave privada
-
Segurança: Crítico manter protegido e com permissões restritas (chmod 400/600)
CSR (Certificate Signing Request)
-
Extensão:
.csr -
Conteúdo: Solicitação para CA assinar um certificado
-
Nota: Não é um certificado; será assinado para gerar o certificado final
Geração de Certificados com Let's Encrypt e Certbot
Pré-requisitos
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install certbot
# RHEL/CentOS
sudo yum install certbot
# Validar instalação
certbot --version
Método 1: Desafio DNS (Recomendado para Wildcards)
Este método é ideal para certificados wildcard (*.exemplo.com.br) e ambientes sem servidor web direto.
Passo 1: Gerar o Certificado
sudo certbot certonly \
--manual \
--preferred-challenges dns \
-d "*.exemplo.com.br" \
-d "exemplo.com.br" \
--agree-tos \
--email [email protected]
Parâmetros explicados:
-
certonly: Gera apenas o certificado, sem modificar configurações -
--manual: Permite controle total do processo -
--preferred-challenges dns: Usa validação DNS -
-d: Define domínios (repetir para múltiplos) -
--agree-tos: Aceita os termos de serviço -
--email: Contato para notificações de renovação
Passo 2: Validar Desafio DNS
Certbot solicitará que você adicione um registro TXT no DNS:
_acme-challenge.exemplo.com.br. IN TXT "xxxxxxxxxxxxxxxxxxxxx"
No seu provedor de DNS (Cloudflare, Route53, etc.):
-
Acesse o painel de DNS
-
Crie um novo registro TXT com a chave fornecida
-
Aguarde propagação (até 2 minutos)
-
Pressione Enter no Certbot para continuar
Passo 3: Validar Instalação
Os certificados serão salvos em:
/etc/letsencrypt/live/exemplo.com.br/
├── cert.pem # Seu certificado
├── privkey.pem # Sua chave privada
├── chain.pem # Certificados intermediários
└── fullchain.pem # Certificado + cadeia
Método 2: Desafio HTTP (Recomendado para Desenvolvimento)
Se você tiver um servidor web rodando:
sudo certbot certonly \
--webroot \
-w /var/www/html \
-d "exemplo.com.br" \
--agree-tos \
--email [email protected]
Renovação Automática
# Testar renovação
sudo certbot renew --dry-run
# Certbot configura renovação automática via systemd ou cron
# Validar:
sudo systemctl status certbot.timer # Systemd
sudo crontab -l # Cron
Conversão entre Formatos
1. PEM para PFX/P12
Combina certificado, chave privada e cadeia em um único arquivo protegido por senha.
Passo a Passo
# Navegar para o diretório de certificados
cd /etc/letsencrypt/live/exemplo.com.br/
# Converter para PFX
openssl pkcs12 -export \
-out exemplo.com.br.pfx \
-inkey privkey.pem \
-in cert.pem \
-certfile chain.pem
O que acontece:
-
OpenSSL solicitará uma senha de proteção
-
O arquivo
.pfxserá criado -
Este arquivo pode ser transportado com segurança
Sintaxe detalhada:
openssl pkcs12 -export # Exportar para PKCS#12
-out arquivo.pfx # Arquivo de saída
-inkey privkey.pem # Chave privada
-in cert.pem # Certificado público
-certfile chain.pem # Certificados intermediários
Opcional - Sem proteção por senha (não recomendado):
openssl pkcs12 -export \
-out exemplo.com.br.pfx \
-inkey privkey.pem \
-in cert.pem \
-certfile chain.pem \
-passout pass:
2. PFX/P12 para PEM
Extrai componentes individuais de um arquivo PFX.
Extrair Certificado
openssl pkcs12 -in exemplo.com.br.pfx \
-clcerts \
-nokeys \
-out cert.pem \
-legacy
Parâmetros:
-
-clcerts: Inclui apenas certificados de cliente -
-nokeys: Não inclui chaves privadas -
-legacy: Compatibilidade com certificados antigos
Extrair Chave Privada
openssl pkcs12 -in exemplo.com.br.pfx \
-nocerts \
-out privkey.pem \
-nodes \
-legacy
Parâmetros:
-
-nocerts: Não inclui certificados -
-nodes: Não criptografa a chave privada (saída em texto plano) -
-legacy: Compatibilidade com formatos antigos
Extrair Cadeia de Certificados
openssl pkcs12 -in exemplo.com.br.pfx \
-nokeys \
-cacerts \
-out chain.pem \
-legacy
Parâmetros:
-
-cacerts: Extrai apenas certificados da CA
Script Automatizado para Extração Completa
#!/bin/bash
arquivo_pfx="exemplo.com.br.pfx"
senha="sua_senha_aqui"
echo "Extraindo certificado..."
openssl pkcs12 -in "$arquivo_pfx" \
-clcerts -nokeys -out cert.pem \
-passin pass:"$senha" -legacy
echo "Extraindo chave privada..."
openssl pkcs12 -in "$arquivo_pfx" \
-nocerts -out privkey.pem \
-nodes -passin pass:"$senha" -legacy
echo "Extraindo cadeia..."
openssl pkcs12 -in "$arquivo_pfx" \
-nokeys -cacerts -out chain.pem \
-passin pass:"$senha" -legacy
echo "Concluído! Arquivos gerados:"
ls -lh cert.pem privkey.pem chain.pem
3. PEM para DER
Converte formato texto para binário.
openssl x509 -in cert.pem -outform DER -out cert.der
4. DER para PEM
Converte formato binário para texto.
openssl x509 -in cert.der -inform DER -out cert.pem
5. Extrair Chave Privada de PEM Combinado
Se você tiver um arquivo PEM com certificado e chave:
openssl pkey -in arquivo_combinado.pem -out privkey.pem
6. Criar Certificado Único PEM (fullchain)
cat cert.pem chain.pem > fullchain.pem
Tabela de Referência Rápida
Boas Práticas e Segurança
1. Proteção de Chaves Privadas
# Definir permissões corretas (apenas leitura para owner)
chmod 400 privkey.pem
# Verificar proprietário
ls -lh privkey.pem
# Deve ser: -r-------- 1 root root
# Nunca commit em Git (adicionar ao .gitignore)
echo "privkey.pem" >> .gitignore
echo "*.pfx" >> .gitignore
2. Backup Seguro
# Criar backup criptografado
tar czf - /etc/letsencrypt/ | \
openssl enc -aes-256-cbc -salt -out certs_backup.tar.gz.enc
# Restaurar backup
openssl enc -d -aes-256-cbc -in certs_backup.tar.gz.enc | tar xz
3. Validação de Certificados
# Verificar validade
openssl x509 -in cert.pem -text -noout | grep -A2 "Validity"
# Verificar domínios (CN e SAN)
openssl x509 -in cert.pem -text -noout | grep -A1 "Subject:"
openssl x509 -in cert.pem -text -noout | grep "DNS:"
# Verificar emissão e expiração
openssl x509 -in cert.pem -noout -dates
4. Corresponder Chave e Certificado
# Calcular hash da chave privada
openssl pkey -in privkey.pem -pubout -outform pem | \
openssl dgst -sha256 -hex
# Calcular hash do certificado
openssl x509 -in cert.pem -pubkey -noout | \
openssl dgst -sha256 -hex
# Se os hashes forem iguais, a chave e certificado combinam
5. Monitoramento de Expiração
#!/bin/bash
# Script para alertar sobre certificados expirando
cert_file="cert.pem"
dias_alerta=30
dias_restantes=$(openssl x509 -in "$cert_file" -noout -dates | \
grep "notAfter" | cut -d= -f2 | \
xargs -I {} date -d {} +%s | \
awk "{print int(($1 - $(date +%s))/86400)}")
if [ "$dias_restantes" -lt "$dias_alerta" ]; then
echo "ALERTA: Certificado expira em $dias_restantes dias!"
# Enviar email, Slack, etc.
fi
6. Configuração Nginx com Certificados
server {
listen 443 ssl http2;
server_name exemplo.com.br www.exemplo.com.br;
ssl_certificate /etc/letsencrypt/live/exemplo.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemplo.com.br/privkey.pem;
# Protocolos seguros
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# HSTS (recomendado)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Seu conteúdo aqui
root /var/www/html;
index index.html;
}
# Redirecionar HTTP para HTTPS
server {
listen 80;
server_name exemplo.com.br www.exemplo.com.br;
return 301 https://$server_name$request_uri;
}
7. Configuração Apache com Certificados
<VirtualHost *:443>
ServerName exemplo.com.br
ServerAlias www.exemplo.com.br
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/exemplo.com.br/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/exemplo.com.br/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/exemplo.com.br/chain.pem
# Protocolos seguros
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite HIGH:!aNULL:!MD5
# HSTS
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
ServerName exemplo.com.br
ServerAlias www.exemplo.com.br
Redirect permanent / https://exemplo.com.br/
</VirtualHost>
Troubleshooting Comum
Erro: "mac verify failure" ao extrair PFX
# Geralmente causado por senha incorreta
openssl pkcs12 -in arquivo.pfx -text -passin pass:suasenha
Solução:
# Tente com -legacy
openssl pkcs12 -in arquivo.pfx -nodes -out temp.pem -legacy
Erro: "Unable to load certificate" no Nginx
# Validar sintaxe
nginx -t
# Verificar permissões
ls -lh /etc/letsencrypt/live/seu-dominio/
# Certificado deve ser legível por nginx
sudo chown root:root /etc/letsencrypt/
sudo chmod 755 /etc/letsencrypt/
Erro: "certificate required" ao usar PFX sem cadeia
# Certificado incompleto, recriar com -certfile
openssl pkcs12 -export \
-out completo.pfx \
-inkey privkey.pem \
-in cert.pem \
-certfile chain.pem # Não esquecer este arquivo
IIS Não Reconhece PFX
# Windows requer formato específico
openssl pkcs12 -export \
-out arquivo.pfx \
-inkey privkey.pem \
-in cert.pem \
-certfile chain.pem \
-name "Friendly Name"
Certificado Incompatível após Let's Encrypt Update
# Let's Encrypt mudou para ECDSA em 2024
# Se precisar de RSA:
sudo certbot certonly \
--manual \
--key-type rsa \
--rsa-key-size 2048 \
-d seu-dominio.com.br
Verificar Certificado Instalado em Servidor
# Via SSH (Linux)
echo | openssl s_client -servername exemplo.com.br -connect exemplo.com.br:443 2>/dev/null | \
openssl x509 -noout -dates -subject
# Via CLI (qualquer SO)
openssl s_client -connect exemplo.com.br:443 -showcerts < /dev/null
Conclusão
Certificados SSL/TLS são fundamentais para segurança moderna. Este guia cobriu:
✅ Geração via Let's Encrypt e Certbot
✅ Conversão entre formatos PEM, PFX, DER
✅ Boas práticas de segurança e proteção
✅ Troubleshooting de problemas comuns
Próximos Passos
-
Revise suas políticas de backup e rotação de certificados
-
Implemente monitoramento de expiração
-
Configure HSTS e outras headers de segurança
-
Teste renovação automática regularmente
-
Mantenha registros de auditoria de mudanças
Recursos Adicionais
Dúvidas ou sugestões? Deixe um comentário abaixo ou entre em contato com nosso time de infraestrutura.
Última atualização: Agosto de 2026
Continuar a ler
Leia também

iSCSI no TrueNAS: Guia Completo de Configuração e Gerenciamento
13 min de leitura
StorCLI - Cheat Sheet Completo
12 min de leitura
TutoriaisCorrupção de filesystem em servidores críticos: como diagnosticar antes de sair reparando
Saiba por que o primeiro passo não é o reparo, mas a saúde do disco: como o SMART, o histórico de shutdowns e o dry-run do xfs_repair separam um incidente resolvido de um desastre de dados.
6 min de leitura
Comentários
Ainda sem comentários
Seja o primeiro a compartilhar sua opinião sobre este artigo.

Deixe um comentário