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
- Certificado expirado - Validade do certificado passou
- Self-signed - Certificado não é de uma CA confiável
- Cadeia incompleta - Faltando certificados intermediários
- Hostname errado - Certificado não bate com o domínio
- 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