Capítulo 34: Planejamento e Preparação de Migração RHEL
Planejar para Sucesso: Migrações RHEL requerem planejamento certificado cuidadoso. Aprenda como auditar, preparar e planejar migração certificado para evitar interrupções.
34.1 Por que o planejamento de certificados importa
Sem Planejamento:
❌ Atualizar RHEL → Certificados falham validação
❌ Serviços não iniciam
❌ Interrupção produção
❌ Rollback requerido
❌ Migração falhada
Com Planejamento:
✅ Pré-auditoria identifica problemas
✅ Certificados preparados com antecedência
✅ Migração teste bem-sucedida
✅ Migração produção suave
✅ Sem interrupções relacionadas certificado
34.2 Auditoria de certificados pré-migração
Inventário Certificado Completo
#!/bin/bash
# pre-migration-cert-audit.sh
# Auditoria certificado completa antes migração RHEL
echo "=== Auditoria de certificados pré-migração ==="
echo "Sistema: $(hostname)"
echo "RHEL Atual: $(cat /etc/redhat-release)"
echo "Data: $(date)"
echo ""
# Encontrar todos certificados
echo "=== Inventário Certificados ==="
find /etc/pki/tls/certs/ /etc/httpd/ /etc/nginx/ /etc/postfix/ /etc/openldap/ \
-name "*.crt" -o -name "*.pem" 2>/dev/null | \
while read cert; do
if openssl x509 -in "$cert" -noout 2>/dev/null; then
echo "Certificado: $cert"
echo " Subject: $(openssl x509 -in "$cert" -noout -subject)"
echo " Emissor: $(openssl x509 -in "$cert" -noout -issuer)"
echo " Expira: $(openssl x509 -in "$cert" -noout -enddate | cut -d= -f2)"
# Verificar algoritmo assinatura
SIG_ALG=$(openssl x509 -in "$cert" -noout -text | grep "Signature Algorithm" | head -2)
echo " Assinatura: $SIG_ALG"
# Verificar tamanho chave
KEY_SIZE=$(openssl x509 -in "$cert" -noout -text | grep "Public-Key" | grep -oP '\d+')
echo " Tamanho Chave: $KEY_SIZE bits"
# Marcar problemas
if echo "$SIG_ALG" | grep -qi "sha1"; then
echo " ⚠️ AVISO: Assinatura SHA-1 (falhará no RHEL 9+)"
fi
if [ "$KEY_SIZE" -lt 2048 ]; then
echo " ⚠️ AVISO: Chave < 2048 bits (pode falhar no RHEL 8+)"
fi
if ! openssl x509 -in "$cert" -noout -ext subjectAltName 2>/dev/null | grep -q "DNS:"; then
echo " ⚠️ AVISO: Certificato não possui SAN"
fi
# Verificar expiração
if ! openssl x509 -in "$cert" -noout -checkend $((86400*90)); then
echo " ⚠️ AVISO: Expira dentro de 90 dias"
fi
echo ""
fi
done
# Rastreamento certmonger
echo "=== Certificados Rastreados certmonger ==="
if command -v getcert &>/dev/null; then
sudo getcert list | grep -E "(Request ID|certificate:|status:)"
else
echo "certmonger não instalado"
fi
# CAs customizadas
echo ""
echo "=== CAs Customizadas em Repositório de Confiança ==="
ls -la /etc/pki/ca-trust/source/anchors/
# Configurações serviço
echo ""
echo "=== Configurações Certificado Serviço ==="
echo "Apache:"
grep -h "SSLCertificate" /etc/httpd/conf.d/*.conf 2>/dev/null | grep -v "^#"
echo ""
echo "NGINX:"
grep -rh "ssl_certificate" /etc/nginx/ 2>/dev/null | grep -v "^#"
echo ""
echo "Postfix:"
sudo postconf | grep -E "smtpd_tls_cert|smtp_tls_cert"
echo ""
echo "=== Auditoria Completa ==="
echo "Salve esta saída para referência migração!"
34.3 Problemas de certificados a corrigir antes da migração
Correções Pré-Migração Críticas
Correção 1: Assinaturas SHA-1 (RHEL 8→9)
# Encontrar certificados assinados SHA-1
for cert in /etc/pki/tls/certs/*.crt; do
if openssl x509 -in "$cert" -noout -text 2>/dev/null | \
grep -qi "Signature Algorithm.*sha1"; then
echo "⚠️ SHA-1: $cert"
fi
done
# Ação: Reemitir TODOS certificados SHA-1 antes migrar para RHEL 9
Correção 2: Chaves Pequenas (< 2048 bits)
# Encontrar chaves pequenas
for cert in /etc/pki/tls/certs/*.crt; do
SIZE=$(openssl x509 -in "$cert" -noout -text 2>/dev/null | \
grep "Public-Key" | grep -oP '\d+')
if [ "$SIZE" -lt 2048 ] 2>/dev/null; then
echo "⚠️ Chave pequena ($SIZE): $cert"
fi
done
# Ação: Reemitir com chaves 2048+ bits
Correção 3: SANs Faltando
# Encontrar certificados sem SANs
for cert in /etc/pki/tls/certs/*.crt; do
if ! openssl x509 -in "$cert" -noout -ext subjectAltName 2>/dev/null | grep -q "DNS:"; then
echo "⚠️ Sem SANs: $cert"
fi
done
# Ação: Reemitir com SANs apropriados (requerido para navegadores modernos)
Correção 4: Expirando Em Breve
# Encontrar certificados expirando dentro janela migração
for cert in /etc/pki/tls/certs/*.crt; do
if ! openssl x509 -in "$cert" -noout -checkend $((86400*90)) 2>/dev/null; then
echo "⚠️ Expirando em breve: $cert"
openssl x509 -in "$cert" -noout -enddate
fi
done
# Ação: Renovar antes migração para evitar expiração meio-migração
34.4 Estratégia Backup
O Que Fazer Backup
#============================================#
# BACKUP CERTIFICADO PRÉ-MIGRAÇÃO
#============================================#
BACKUP_DIR="/var/backups/pre-migration-$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
# Backup certificados e chaves
sudo tar czf "$BACKUP_DIR/certificates.tar.gz" \
/etc/pki/tls/ \
/etc/pki/ca-trust/source/anchors/ \
/etc/pki/nssdb/
# Backup configurações serviço
sudo tar czf "$BACKUP_DIR/service-configs.tar.gz" \
/etc/httpd/conf.d/*.conf \
/etc/nginx/nginx.conf \
/etc/nginx/conf.d/ \
/etc/postfix/main.cf \
/etc/openldap/ \
/var/lib/pgsql/data/postgresql.conf \
/var/lib/pgsql/data/pg_hba.conf \
2>/dev/null
# Backup banco dados certmonger
sudo tar czf "$BACKUP_DIR/certmonger.tar.gz" \
/var/lib/certmonger/
# Salvar lista certmonger
sudo getcert list > "$BACKUP_DIR/certmonger-list.txt" 2>/dev/null
# Salvar crypto-policy (RHEL 8+)
update-crypto-policies --show > "$BACKUP_DIR/crypto-policy.txt" 2>/dev/null
# Criar inventário CSV
./pre-migration-cert-audit.sh > "$BACKUP_DIR/certificate-inventory.txt"
# Definir permissões
sudo chmod 700 "$BACKUP_DIR"
echo "✅ Backup completo: $BACKUP_DIR"
ls -lh "$BACKUP_DIR"
34.5 Plano Teste
Configuração Ambiente Teste
## Lista de verificação de teste de migração
### Ambiente Teste
- [ ] Clonar produção para VM/container teste
- [ ] Mesma versão RHEL que produção
- [ ] Mesmos certificados (cópias, não originais!)
- [ ] Mesmas configurações serviço
- [ ] Rede isolada de produção
### Teste Migração
- [ ] Executar migração em sistema teste
- [ ] Verificar todos serviços iniciam
- [ ] Testar validação certificado
- [ ] Verificar crypto-policy (RHEL 7→8/9)
- [ ] Testar conexões cliente
- [ ] Verificar rastreamento certmonger (se usado)
- [ ] Documentar quaisquer problemas
### Solução de Problemas
- [ ] Corrigir problemas encontrados em teste
- [ ] Atualizar plano migração
- [ ] Re-testar
- [ ] Documentar workarounds
### Prontidão Produção
- [ ] Migração teste bem-sucedida
- [ ] Problemas documentados e resolvidos
- [ ] Plano rollback pronto
- [ ] Time treinado
- [ ] Janela manutenção agendada
34.6 Timeline Migração
Cronograma Migração Exemplo
Semana 1-2: Planejamento e Auditoria
├─ Completar inventário certificados
├─ Identificar problemas (SHA-1, chaves pequenas, etc.)
├─ Planejar remediação
└─ Configurar ambiente teste
Semana 3-4: Remediação
├─ Reemitir certificados problemáticos
├─ Atualizar configurações
├─ Testar em ambiente atual
└─ Verificar automatização funciona
Semana 5-6: Teste
├─ Clonar produção para teste
├─ Executar migração teste
├─ Validar certificados pós-migração
├─ Documentar problemas e correções
└─ Atualizar runbook migração
Semana 7: Preparação Pré-Migração
├─ Auditoria certificado final
├─ Renovar certificados expirando
├─ Completar backups
├─ Briefar time
└─ Verificar plano rollback
Semana 8: Migração
├─ Janela manutenção
├─ Executar migração
├─ Validar certificados
├─ Monitorar por 24-48 horas
└─ Documentar lições aprendidas
34.7 Planejamento Rollback
Procedimento Rollback Certificado
#============================================#
# PLANO ROLLBACK CERTIFICADO
#============================================#
# Se migração falhar devido problemas certificado:
# Passo 1: Rollback RHEL (usando leapp ou snapshots)
# Ver documentação migração RHEL
# Passo 2: Restaurar certificados (se necessário)
sudo tar xzf /var/backups/pre-migration-YYYYMMDD/certificates.tar.gz -C /
# Passo 3: Restaurar configs serviço
sudo tar xzf /var/backups/pre-migration-YYYYMMDD/service-configs.tar.gz -C /
# Passo 4: Restaurar certmonger
sudo tar xzf /var/backups/pre-migration-YYYYMMDD/certmonger.tar.gz -C /
# Passo 5: Reiniciar serviços
sudo systemctl restart httpd nginx postfix slapd
# Passo 6: Verificar
curl -v https://localhost/
sudo getcert list
34.8 Plano Comunicação
Template Comunicação Stakeholder
## Migração RHEL - Avaliação Impacto Certificado
### Detalhes Migração
- **De:** RHEL X.Y
- **Para:** RHEL X.Y
- **Data:** YYYY-MM-DD
- **Janela:** XX:00 - XX:00 UTC
### Análise Impacto Certificado
- **Total Certificados:** XX
- **Certificados Requerendo Ação:** XX
- **Serviços Afetados:** Apache, NGINX, Postfix, LDAP, etc.
### Ações Pré-Migração Requeridas
- [ ] Reemitir XX certificados SHA-1
- [ ] Renovar XX certificados expirando
- [ ] Atualizar XX configurações serviço
- [ ] Testar compatibilidade crypto-policy (RHEL 8+)
### Durante Migração
- **Downtime Esperado:** X horas
- **Validação Certificado:** Pós-migração
- **Plano Rollback:** Disponível se necessário
### Validação Pós-Migração
- [ ] Todos serviços iniciam com sucesso
- [ ] Validação certificado funcionando
- [ ] crypto-policy aplicada (RHEL 8+)
- [ ] Rastreamento certmonger mantido
- [ ] Conexões cliente bem-sucedidas
### Mitigação Risco
- Backups completos completados
- Migração teste bem-sucedida
- Procedimento rollback documentado
- Time em standby
### Contato
- **Líder Migração:** Nome <email>
- **Escalação:** Gerente <email>
34.9 Lista de verificação de migração
Lista de verificação pré-migração completa
## Lista de verificação de prontidão para migração de certificados
### Auditoria e Inventário (Semana 1-3)
- [ ] Completar inventário certificados
- [ ] Documentar todas localizações certificado
- [ ] Identificar todos serviços usando certificados
- [ ] Mapear certificado para dependências serviço
- [ ] Documentar CAs customizadas em uso
### Identificação Problemas (Semana 2-4)
- [ ] Identificar certificados assinados SHA-1
- [ ] Identificar chaves pequenas (< 2048 bits)
- [ ] Identificar certificados sem SANs
- [ ] Identificar certificados expirando (< 180 dias)
- [ ] Identificar configs TLS codificadas (vs crypto-policy)
### Remediação (Semana 3-6)
- [ ] Reemitir todos certificados SHA-1
- [ ] Reemitir certificados chave pequena
- [ ] Adicionar SANs a todos certificados
- [ ] Renovar certificados expirando
- [ ] Remover configs TLS codificadas (preparar para crypto-policy)
### Teste (Semana 5-7)
- [ ] Configurar ambiente teste
- [ ] Clonar certificados produção para teste
- [ ] Executar migração teste
- [ ] Validar todos serviços iniciam
- [ ] Testar conexões cliente
- [ ] Testar crypto-policy (RHEL 7→8/9)
- [ ] Documentar problemas encontrados
- [ ] Resolver problemas em teste
- [ ] Re-testar até limpo
### Backup (Semana 7)
- [ ] Backup sistema completo
- [ ] Backup específico certificado
- [ ] Backup configuração serviço
- [ ] Backup banco dados certmonger
- [ ] Testar procedimento restore
### Documentação (Semana 7)
- [ ] Runbook migração completo
- [ ] Procedimento rollback documentado
- [ ] Workarounds problemas documentados
- [ ] Time briefado
- [ ] Stakeholders notificados
### Preparação Final (Dia antes)
- [ ] Verificar backups
- [ ] Verificar ambiente teste
- [ ] Revisar runbook
- [ ] Confirmar janela manutenção
- [ ] Papéis time atribuídos
34.10 Conclusões Chave
- Planejar com antecedência - Começar 6-8 semanas antes migração
- Auditar completamente - Conhecer cada certificado
- Corrigir problemas cedo - Não aguardar até dia migração
- Testar extensivamente - Múltiplas execuções teste
- Backup de tudo - Certificados, configs, BD certmonger
- Documentar claramente - Runbook, rollback, problemas
- Comunicar proativamente - Manter stakeholders informados
Cartão de Referência Rápida
┌──────────────────────────────────────────────────────────────┐
│ REFERÊNCIA RÁPIDA PLANEJAMENTO MIGRAÇÃO │
├──────────────────────────────────────────────────────────────┤
│ Timeline: 6-8 semanas antes migração │
│ │
│ Pré-audit: Encontrar todos certificados │
│ Verificar assinaturas (SHA-1 → SHA-256) │
│ Verificar tamanhos chave (< 2048 → 2048+) │
│ Verificar SANs (faltando → adicionar) │
│ Verificar expiração (< 180 dias → renovar) │
│ │
│ Backup: tar czf certs.tar.gz /etc/pki/tls/ │
│ getcert list > certmonger-list.txt │
│ update-crypto-policies --show > policy.txt │
│ │
│ Testar: Clonar para ambiente teste │
│ Executar migração teste │
│ Validar certificados funcionam │
│ Documentar e corrigir problemas │
└──────────────────────────────────────────────────────────────┘
⚠️ Certificados SHA-1 FALHARÃO no RHEL 9+
⚠️ crypto-policies introduzidas no RHEL 8
✅ Testar múltiplas vezes antes produção
Navegação do Capítulo