Pular para o conteúdo principal

HTTPS

Esta seção apresenta como configurar o DBizzie para usar HTTPS em ambiente de produção.

Visão Geral

Para ambientes de produção, é essencial configurar HTTPS para garantir a segurança das comunicações. O DBizzie oferece duas abordagens principais para implementar HTTPS:

  1. Proxy Reverso Nativo - Usando NGINX instalado diretamente no servidor
  2. Proxy Reverso via Docker - Usando NGINX como container adicional

Método 1: Proxy Reverso Nativo

Esta abordagem é recomendada para servidores onde você tem controle total do sistema operacional.

Pré-requisitos

  • NGINX instalado no servidor
  • Certificado SSL válido (Let's Encrypt, certificado próprio, etc.)
  • DBizzie já instalado e funcionando

Instalação do NGINX

# Ubuntu/Debian
sudo apt update
sudo apt install nginx

# CentOS/RHEL
sudo yum install nginx

Configuração do NGINX

Crie um arquivo de configuração para o DBizzie:

sudo nano /etc/nginx/sites-available/dbizzie

Adicione a seguinte configuração:

# /etc/nginx/sites-available/dbizzie
server {
server_name seu.dominio.com;

# Configuração para WebSocket (necessário para tempo real)
location /cable {
proxy_pass http://localhost:4000/cable;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# Timeouts para conexões WebSocket
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}

# Configuração principal da aplicação
location / {
proxy_pass http://localhost:4000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# Headers de segurança
proxy_set_header X-Frame-Options DENY;
proxy_set_header X-Content-Type-Options nosniff;
proxy_set_header X-XSS-Protection "1; mode=block";
}

# Configuração SSL
listen 443 ssl http2;
ssl_certificate /caminho/para/seu/fullchain.pem;
ssl_certificate_key /caminho/para/sua/privkey.pem;

# Configurações de segurança SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
}

# Redirecionamento HTTP para HTTPS
server {
listen 80;
server_name seu.dominio.com;
return 301 https://$host$request_uri;
}

Ativação da Configuração

# Criar link simbólico
sudo ln -s /etc/nginx/sites-available/dbizzie /etc/nginx/sites-enabled/

# Testar configuração
sudo nginx -t

# Reiniciar NGINX
sudo systemctl restart nginx

# Habilitar inicialização automática
sudo systemctl enable nginx

Método 2: Proxy Reverso via Docker

Esta abordagem mantém todo o ambiente containerizado, facilitando o gerenciamento.

1. Criar Configuração do NGINX

Crie o arquivo nginx.conf no diretório do DBizzie:

# nginx.conf
server {
listen 80;
server_name seu.dominio.com;

# Redirecionamento HTTP para HTTPS
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
server_name seu.dominio.com;

# Configurações SSL
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

# Headers de segurança
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;

# Configuração para WebSocket
location /cable {
proxy_pass http://web:80/cable;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# Timeouts para WebSocket
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
send_timeout 600s;
}

# Configuração principal
location / {
proxy_pass http://web:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# Timeouts
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
send_timeout 600s;

# Upload de arquivos
client_max_body_size 100M;
}
}

2. Preparar Certificados SSL

Crie o diretório para certificados:

mkdir cert

Copie seus certificados SSL para o diretório:

# Exemplo para certificados Let's Encrypt
cp /etc/letsencrypt/live/seu.dominio.com/fullchain.pem ./cert/
cp /etc/letsencrypt/live/seu.dominio.com/privkey.pem ./cert/

3. Atualizar Docker Compose

Adicione o serviço NGINX ao seu docker-compose.yml:

# docker-compose.yml
services:
# ... outros serviços existem ...

nginx:
image: nginx:stable-alpine
container_name: dbizzie-nginx
restart: unless-stopped
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- ./cert:/etc/nginx/ssl:ro
ports:
- "80:80"
- "443:443"
depends_on:
- web
networks:
- dbizzie-network

# ... resto da configuração ...

4. Remover Porta Exposta do Serviço Web

No serviço web, remova ou comente as portas para que apenas o NGINX seja acessível:

web:
# ... outras configurações ...
# ports:
# - "4000:80" # Comentar esta linha
# - "4001:3000"
# ... resto da configuração ...

5. Reiniciar os Serviços

docker-compose down
docker-compose up -d

Verificação da Configuração

Após configurar HTTPS, verifique se tudo está funcionando:

Testes de Conectividade

# Testar redirecionamento HTTP para HTTPS
curl -I http://seu.dominio.com

# Testar acesso HTTPS
curl -I https://seu.dominio.com

# Verificar certificado SSL
openssl s_client -connect seu.dominio.com:443 -servername seu.dominio.com

Solução de Problemas

Erro 502 Bad Gateway

# Verificar se o DBizzie está rodando
docker-compose ps

# Verificar logs do NGINX
docker-compose logs nginx # Para método Docker
sudo journalctl -u nginx # Para método nativo

WebSocket não funciona

Verifique se a configuração do /cable está correta e se os headers Upgrade e Connection estão sendo passados.

Certificado inválido

# Verificar validade do certificado
openssl x509 -in cert/fullchain.pem -text -noout

# Verificar se o certificado corresponde à chave
openssl x509 -noout -modulus -in cert/fullchain.pem | openssl md5
openssl rsa -noout -modulus -in cert/privkey.pem | openssl md5

Próximos Passos

Após configurar HTTPS:

  1. Testar acesso via HTTPS
  2. Configurar firewall para permitir apenas portas 80 e 443
  3. Configurar monitoramento do certificado SSL
  4. Prosseguir com configuração inicial
Importante

Sempre teste a configuração HTTPS em um ambiente de desenvolvimento antes de aplicar em produção.