🔐 Certificados Digitais na Prática — CA Interna + Apache2 com TLS
Público: Analistas de segurança em formação | Produzido por:Base TI Tags: 🏷️ #pki #tls #openssl #apache2 #certificados #x509 #blueteam
Neste lab você vai construir do zero uma PKI interna completa: criar uma CA Root no Debian 13, gerar um certificado com SAN no Kali Linux, configurar o Apache2 com TLS hardened e instalar a cadeia de confiança no sistema e nos browsers. Ao final, o cadeado 🔒 aparece sem avisos — provado via openssl s_client.
📚 1. Conceitos Fundamentais
Uma Autoridade Certificadora (CA) é uma entidade confiável responsável por emitir, assinar e revogar certificados digitais X.509. Ela é a raiz da confiança (Root of Trust) em uma infraestrutura de PKI (Public Key Infrastructure).
Root CA
└── Intermediate CA (opcional)
└── Certificado Final (servidor, cliente, e-mail)
Componentes de um Certificado X.509 v3
Campo
Descrição
Exemplo
Subject
Identidade do dono
CN=securecorp.local, O=SecureCorp
Issuer
Quem assinou
CN=SecureCorp Root CA
Validity
Período de validade
Not Before / Not After
Public Key
Chave pública do dono
RSA 2048/4096 bits
Signature
Assinatura digital da CA
SHA-256 with RSA
SAN
Subject Alternative Names
DNS:securecorp.local, IP:192.168.56.20
Extensions
Usos permitidos
TLS Web Server Authentication
Fluxo de Emissão de Certificado
[Cliente] [CA]
| |
|-- 1. Gera par de chaves ------>|
| (chave privada fica local) |
| |
|-- 2. Cria CSR (pedido) ------->|
| (contém chave pública + SAN) |
| |
|<-- 3. CA assina e devolve -----|
| (certificado .crt) |
| |
|-- 4. Instala no servidor |
🏛️ 2. Analogias do Mundo Real
🏛️ A CA é o Cartório de Notas: Você não pode assinar um contrato qualquer e esperar que todos confiem. Você vai a um cartório que valida sua identidade, autentica sua assinatura e emite um documento com fé pública. A CA faz exatamente isso no mundo digital.
✈️ O Passaporte — Chain of Trust: O agente de imigração não te conhece, mas confia no seu passaporte porque confia no governo brasileiro que o emitiu. Ele não precisa te conhecer — conhece a autoridade que assinou. Browsers funcionam igual: confiam no site porque confiam na CA.
🔒 O Cadeado Assimétrico: Eu te dou o cadeado aberto (chave pública). Você coloca sua mensagem dentro e fecha. Só eu, com minha chave privada, consigo abrir. A chave privada nunca sai da sua máquina.
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name
localityName = Locality Name
organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
✅ Saída esperada: Subject e Issuer idênticos (autoassinado) + CA:TRUE nas extensions + validade de 10 anos.
💀 Parte 2 — Kali Linux: Gerando o CSR com SAN
⚠️ Ponto crítico para browsers modernos: Chrome, Firefox e Edge exigem o campo SAN (Subject Alternative Name). Sem ele, o browser exibe aviso de segurança mesmo com CA confiável instalada. Sempre inclua o SAN!
Passo 1 — Criar diretório e arquivo de configuração com SAN:
chmod 400 /etc/apache2/ssl/securecorp.key # Chave privada: só root lê
chmod 644 /etc/apache2/ssl/securecorp.crt
chmod 644 /etc/apache2/ssl/securecorp-ca.crt
ls -la /etc/apache2/ssl/
🌐 Parte 5 — Página HTML da SecureCorp
💡 Para o instrutor: A página completa com design cyberpunk dark está disponível no material de apoio como securecorp-index.html. Copie direto para /var/www/securecorp/index.html.
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/securecorp.crt
SSLCertificateKeyFile /etc/apache2/ssl/securecorp.key
SSLCACertificateFile /etc/apache2/ssl/securecorp-ca.crt
# Desabilitar protocolos antigos
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
# Security Headers
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Frame-Options "DENY"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "no-referrer"
💡 Lição-chave: "A confiança vem da CA, não do certificado em si. Trocar a CA = browser rejeita."
🎯 Exercício Prático com Solução
🎯 Cenário — Operação SecureCorp: Você foi contratado para implementar a PKI interna. O Debian 13 é a CA. O Kali é o servidor web do portal interno. Implemente a cadeia completa e prove que a conexão é válida e confiável.
Checklist do aluno:
⬜ Criar CA Root no Debian 13 com estrutura correta
⬜ Gerar CSR com SAN no Kali para securecorp.local
⬜ Assinar o certificado na CA e devolver ao Kali
⬜ Subir Apache2 com a página da SecureCorp em HTTPS
⬜ Instalar a CA no Firefox e demonstrar o cadeado verde
⬜ Provar a cadeia via openssl verify e openssl s_client
Solução — Validação Rápida:
# No Debian: CA OK?
openssl x509 -noout -text -in /root/CA/certs/ca.crt \
| grep -E "CA:true|Subject:|Not After"
# No Kali: cadeia OK?
openssl verify -CAfile ~/pki-web/ca.crt /etc/apache2/ssl/securecorp.crt
# ✅ securecorp.crt: OK
"Por que a chave privada não vai para a CA?" A CA nunca precisa da sua chave privada. O CSR já contém a chave pública. A CA usa a chave privada dela para assinar. Isso é a base da criptografia assimétrica.
"Qual a diferença entre .crt, .pem e .cer?" Mesma coisa, nomes diferentes por convenção. .pem é Base64 com header -----BEGIN-----, .der é binário. O OpenSSL usa PEM por padrão.
"Por que não usar Let's Encrypt para o lab?" Let's Encrypt valida domínios públicos via HTTP/DNS challenge. Domínios .local e IPs privados não são alcançáveis — daí a necessidade de CA própria.
"O que é OCSP?" Online Certificate Status Protocol — permite verificar em tempo real se um certificado foi revogado, sem baixar a CRL inteira. Mais eficiente em larga escala.
📌 Atenção no lab: Se o SCP falhar, use cat + copiar/colar como alternativa. Em VMs com NAT, ajuste os IPs conforme o seu ambiente. O Chrome pode exigir reinicialização após importar a CA no NSS. O /etc/hosts é obrigatório — sem ele o DNS local não resolve.
Material produzido por Base TI para o programa Hackers do Bem · 2025