Erro SSL/TLS

Erro SSL/TLS

Descrição do Problema

Erros relacionados a certificados SSL ou conexões TLS:

SSL_ERROR_HANDSHAKE_FAILURE_ALERT
certificate verify failed
unable to get local issuer certificate
CERT_HAS_EXPIRED
self signed certificate in certificate chain

Possíveis Causas

  1. Certificado expirado - Validade do certificado passou
  2. Self-signed - Certificado não é de uma CA confiável
  3. Cadeia incompleta - Faltando certificados intermediários
  4. Hostname errado - Certificado não bate com o domínio
  5. CA desatualizada - Lista de CAs do sistema está antiga

Soluções

1. Verificar Certificado

# Ver detalhes do certificado
echo | openssl s_client -servername seu-site.com \
  -connect seu-site.com:443 2>/dev/null | \
  openssl x509 -noout -text

# Ver datas de validade
echo | openssl s_client -servername seu-site.com \
  -connect seu-site.com:443 2>/dev/null | \
  openssl x509 -noout -dates

2. Renovar Certificado Let’s Encrypt

# Renovar com certbot
sudo certbot renew

# Ou renovar específico
sudo certbot renew --cert-name seu-site.com

# Reiniciar servidor web
sudo systemctl restart nginx

3. Atualizar CA Certificates

# Ubuntu/Debian
sudo apt update
sudo apt install ca-certificates
sudo update-ca-certificates

# CentOS/RHEL
sudo yum update ca-certificates

4. Configurar Certificado no Node.js

// Ignorar verificação SSL (NÃO RECOMENDADO EM PRODUÇÃO)
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

// Melhor: especificar CA
const https = require('https');
const fs = require('fs');

const options = {
  ca: fs.readFileSync('/path/to/ca-cert.pem')
};

5. Configurar Certificado Completo

# Concatenar certificados (fullchain)
cat seu-certificado.crt intermediario.crt > fullchain.crt

# Verificar cadeia
openssl verify -CAfile ca.crt fullchain.crt

6. Gerar Novo Certificado com Let’s Encrypt

# Instalar certbot
sudo apt install certbot

# Gerar certificado
sudo certbot certonly --standalone -d seu-site.com

# Os arquivos estarão em:
# /etc/letsencrypt/live/seu-site.com/fullchain.pem
# /etc/letsencrypt/live/seu-site.com/privkey.pem

7. Configurar no Gateway

# config.yaml
ssl:
  enabled: true
  cert: /etc/letsencrypt/live/seu-site.com/fullchain.pem
  key: /etc/letsencrypt/live/seu-site.com/privkey.pem
  ca: /etc/letsencrypt/live/seu-site.com/chain.pem

Verificar Problemas

# Testar conexão SSL completa
openssl s_client -connect seu-site.com:443 -servername seu-site.com

# Verificar com curl
curl -v https://seu-site.com

# Testar certificado específico
openssl verify certificado.crt

Problemas Relacionados

Prevenção

  • Configure renovação automática de certificados
  • Monitore datas de expiração
  • Use certificados de CAs confiáveis
  • Mantenha o sistema atualizado