Conexão criptografada em ambiente de desenvolvimento

Pode-se implementar a conexão criptografada em desenvolvimento por meio de Apache e Nginx, porém aqui vou usar o Stunnel – stunnel-5.48-5.el8.0.1.x86_64

https://www.
HTTP over SSL

Criar uma chave privada e o certificado

A chave privada e o certificado serão autoassinados e gerados por meio do comando openssl.

1) Gerar a chave privada – 4096 bits

# openssl genrsa 4096 > stunnel.key

2) Gerar o certificado

# openssl req -new -x509 -nodes -sha1 -days 365 -key stunnel.key > stunnel.cert

3) Gerar o arquivo PEM – chave privada + certificado

# cat stunnel.key stunnel.cert > stunnel.pem

Criar o arquivo de configuração do Stunnel

O arquivo de configuração define a versão do protocolo (TLS v 1.0, mas existe até a versão 1.2). As versões SSL v 1, 2 e 3 são obsoletas e inseguras.

pid=

cert = stunnel/stunnel.pem
sslVersion = TLSv1
foreground = yes
output = /var/log/stunnel.log

[https]
accept=8443
connect=8001
TIMEOUTclose=1

Depreende-se da configuração acima que a conexão é feita pela porta 8443, porém ela é “tunelada” para a porta 8001.

Criar um script para ativar o servidor web do Django

Recomendo a ativação do servidor web Django, por meio do script runstunnel.sh abaixo:

stunnel stunnel/dev_https &
python3 manage.py runserver 0.0.0.0:8000 &
HTTPS=1 python3 manage.py runserver 0.0.0.0:8001

Resumo:

  • A conexão HTTP é feita pela porta 8000
  • A conexão HTTPS é feita pela porta 8443
    • A porta 8001 deve estar ativa e é usada pelo stunnel para obter resposta para a porta 8443

Resultado

Há implicações de segurança que impedem que as configurações acima sejam implementadas em produção, sendo as principais:

  • certificado autoassinado – não provê a segurança quanto ao servidor que está respondendo à conexão HTTPS ser realmente o servidor que se acredita estar conectando
  • TLS v 1 – existem versões TLS mais seguras
  • Não limitar ao uso de cifras seguras, somente

Após implementar o HTTPS ao site, o navegador Google Chrome acusa como site inseguro por, principalmente, estar usando certificado autoassinado.

Nginx, Apache, Stunnel, Django, Python, Google e Chrome – são marcas/ferramentas registradas

Deixe um comentário